python - python Pandas: 解析"List Object has no Attribute'Loc'"

  显示原文与译文双语对照的内容
0 0

我将CSV作为DataFrame导入,使用:


import numpy as np
import pandas as pd

df = pd.read_csv("test.csv")

然后,我尝试做一个简单的基于id的替换:
df.loc[df.ID == 103, ['fname', 'lname']] = 'Michael', 'Johnson'

出现了以下错误:

AttributeError: 'list' object has no attribute 'loc'

注意,当我做 print pd.version() 时,我得到 0.12.0,所以它不是( 至少我觉得)的问题,因为有 pre-11 版本。 有什么想法吗?

时间: 原作者:

0 0

要从评论中拾取: 我是这样做的:"


df = [df.hc== 2]

你所创建的是一个"掩码": 带有布尔值的array,表示索引的哪一部分满足你的条件。

要在你的条件下过滤 dataframe,你需要执行以下操作:


df = df[df.hc == 2]

更明确的是:


mask = df.hc == 2
df = df[mask]

如果要保留整个 dataframe,并且只希望替换特定的值,则有以下方法替换: 用于替换的 python Pandas 等价。 另一个( 性能明智) 方法是创建一个单独的DataFrame,其中包含 from/到 values,使用 pd.merge 将它的合并到现有的DataFrame中。 并且使用索引来设置值也是可能的:


df[mask]['fname'] = 'Johnson'

但是对于较大的替换集,你需要使用另外两种方法之一或者使用"应用"函数( 。用于值转换) 中的。 最后但并非最不重要:你可以使用. fillna('bla') 快速填充NA值。

原作者:
0 0

回溯表明,df是一个 list,而不是在代码行中预期的DataFrame

这意味着在 df = pd.read_csv("test.csv")df.loc[df.ID == 103, ['fname', 'lname']] = 'Michael', 'Johnson' 你还有其他代码行将列表对象分配给 df 。 检查那段代码来找到你的Bug

原作者:
...