У меня есть набор данных следующим образом: я собираюсь фильтровать строки, где значение счетчиков равно 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

Любое предложение?

1
Mary 24 Июн 2019 в 01:23

3 ответа

Лучший ответ

В вашем коде проблема с этой частью 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
1
0xPrateek 24 Июн 2019 в 06:59

Count также является методом pandas DataFrame.

Когда вы делаете df.count, pandas понимает, что вы вызываете метод count(), а не извлекаете столбец с таким же именем. Выполнение df["count"] решит вашу проблему.

2
Erfan 23 Июн 2019 в 22:30

Стандартный способ сделать это - сделать следующее:

Решение 1

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

Решение 2 Однако, если вы действительно хотите получить список логических значений, вы можете использовать лямбда-выражения:

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

Затем вы можете использовать этот список, чтобы получить желаемый результат следующим образом:

df1[booleans]

Это в основном то же самое, что и решение 1.

1
alif 23 Июн 2019 в 22:47