我有一个使用此命令加载csv数据文件的数据帧:
df = pd.read_csv(data_path, header=0, delimiter="|",dtype=object)
print df.head(3)
具有以下结构
ID Val1 Val2
0 1 0.00000000
1 1 0.00000000
2 1 0.00000000
我使用以下命令过滤掉等于0.00000000的Val2行:
df=[df.Val2 != "0.00000000"]
df.head(3)
我希望结果是只有非零值的数据帧。但是我得到了这个错误:'list'对象没有属性'head'
我错过了什么?答案 0 :(得分:2)
你有一个错字:
df=df[df.Val2 != "0.00000000"]
但从根本上比较浮点数是有问题的,您可以使用np.isclose
来比较浮点数和容差:
df[~np.isclose(df['Val2'], 0.0)]
答案 1 :(得分:1)
df.Val2 != "0.00000000"
在符合条件的行中返回一个系列(或list
本质上,这就是为什么你得到错误'list' object has no attribute 'head'
)与True
的布尔值的错误不在行中的False
。
正如EdChum所提到的,您需要将该列表传递回原始数据框,以便对其进行过滤并仅获取返回True
的行。