过滤PANDAS DF行

时间:2018-02-14 23:25:37

标签: python pandas

我通常使用以下语法过滤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     

4 个答案:

答案 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)

不确定我理解这个问题的负面评价。但是,我能够通过分配新索引并重命名列来解决此问题。