我通常使用以下语法过滤pandas DataFrame:
FDF = DF[DF['Color'] == 'Blue']
我希望看到一个结果,其中FDF(我的过滤后的DataFrame)只返回颜色列设置为蓝色的行。相反,我得到这样的东西。有趣的是,该程序过去按预期工作,但在我升级操作系统并重新安装Python和所有库后停止工作。此外,它不会在我的所有DataFrame上执行此操作。有什么想法吗?
0 Color Shape Data
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 Blue NaN NaN
5 NaN NaN NaN
6 NaN NaN NaN
编辑:我认为前3个回答误解了这个问题。我正在显示结果,而不是原始的DF。我原来的DF看起来像这样:
Color Shape Data
0 Green square Y
1 Red triangle N
2 Red circle Y
3 Blue circle N
4 Green square N
5 Red triangle N
我期待的结果是:
Color Shape Data
3 Blue circle N
答案 0 :(得分:0)
('Color', 'Shape', 'Data')
不是您的列名,而是数据的第一行,否则不会为此行分配索引0。由于DF没有名为' Color'的列,DF['Color'] == 'Blue'
没有过滤任何内容,因此它会返回所有记录。
如果您从csv或Excel工作表导入数据,我建议您使用文件的第一行指定列名。
答案 1 :(得分:0)
您缺少DF.loc,因此您将获得不必要的行。
将第一行设为列标题:
DF=DF.rename(columns=DF.iloc[0].drop(DF.index[0])
然后使用以下内容获取颜色为蓝色的行:
FDF=DF.loc[DF['Color'] =='Blue']
答案 2 :(得分:0)
您尝试按不存在的列名进行过滤。首先将第一行作为列标题:
DF.columns = DF.iloc[0]
DF.reindex(DF.index.drop(0))
现在使用
进行过滤FDF = DF[DF['Color'] == 'Blue']
答案 3 :(得分:0)
不确定我理解这个问题的负面评价。但是,我能够通过分配新索引并重命名列来解决此问题。