在熊猫中过滤数据返回错误的“方法”对象不可迭代

时间:2019-06-23 22:23:27

标签: python pandas

我有一个数据集,如下所示: 我将过滤计数值等于1的行。

index      count
1           4
2           5
3           1
4           1

这是我的代码:

booleans =[]

for number in df1.count:
    if number ==1:
        booleans.append (True)
    else:
        booleans.append (False)

但是出现此错误:

'method' object is not iterable

我也尝试过:

df[df.count==1]

但是我遇到以下错误:

KeyError: False

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

Count 也是pandas DataFrame的一种方法。

当您执行df.count时,pandas知道您正在调用count()方法,而不是获取碰巧具有相同名称的列。进行df["count"]可以解决您的问题。

答案 1 :(得分:1)

在您的代码中,问题出在这部分df1.count上。实际上,熊猫具有count()方法,该方法用于计算编号。给定轴上的非NA /空观测值的数量。

在您的代码中,它返回类似这样的内容

<bound method DataFrame.count of   index count
0     1     4
1     2     5
2     3     1
3     4     1>

您可以使用df[df['count']=='1']来获取所需的内容。

import pandas as pd

data = {"index":['1','2','3','4'],
        "count":['4','5','1','1']}

df = pd.DataFrame(data)
indexes = df[df['count']=='1']
print(indexes)

输出

     index count
   2     3     1
   3     4     1

答案 2 :(得分:1)

执行此操作的标准方法是:

解决方案1 ​​

df1[df1["count"]=='1']

解决方案2 但是,如果您确实想要获取布尔值列表,则可能需要使用lambda:

booleans = list(df1['count'].apply(lambda x:x=='1').values)

然后您可以使用此列表获取所需的结果,如下所示:

df1[booleans]

这与解决方案1基本相同。