在pandas数据帧中过滤

时间:2015-08-11 16:00:27

标签: python pandas

我有一个使用此命令加载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'

我错过了什么?

2 个答案:

答案 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的行。