在 Pandas 中过滤数据会返回错误'method'对象不可迭代



我的数据集如下:我要过滤行,其中计数值等于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

任何建议?

在您的代码中,问题与此部分df1.count有关。实际上,熊猫是一种方法count(),用于计数no。在给定轴上的非NA/NULL观测值。

在您的代码中,它返回了这样的东西,

<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

计数也是 pandas dataframe的方法。

df.count时,Pandas知道您正在调用count()方法,而不是拿出恰好具有相同名称的列。执行df["count"]可以解决您的问题。

这样做的标准方法是执行以下操作:

解决方案1

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

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

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

然后,您可以使用此列表来获得您想要的结果:

df1[booleans]

这基本上与解决方案1。

最新更新