2014-10-08 4 views
3

Я довольно новичок в Pandas, но хотел попробовать его после работы с R некоторое время.Python Pandas: Фильтрация фрейма данных

Проблема, с которой я сталкиваюсь, выясняет, почему фильтр не работает для одного из моих кадров данных. У меня есть кадр данных data_df с несколькими столбцами, один из которых - c, который содержит названия стран. Я пытаюсь отфильтровать строки, где c == None.

Моя первая попытка была сделать это:

countries_df = data_df[data_df.c != None] 

Однако, что дало 0 строк. Это, однако, сработало:

countries_df = data_df[~data_df.c.isin([None])] 

Может кто-нибудь объяснить, почему? Похоже, что из документа Pandas первый должен иметь возможность правильно фильтровать.

Некоторые примеры строк:

_heartbeat_       a     al  c  cy  g 
0 NaN Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; H... en-US US Anaheim 15r91 
1 NaN Mozilla/4.0 (compatible; MSIE 7.0; Windows NT ... en-us None NaN ifIpBW 
2 NaN Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20... en-US,en;q=0.5 US Fort Huachuca 10DaxOu 
3 NaN Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; S... en-US US Houston TysVFU 
4 NaN Opera/9.80 (Android; Opera Mini/7.5.33286/29.3... en None NaN 10IGW7m 
5 NaN Mozilla/5.0 (compatible; MSIE 10.0; Windows NT... en-US US Mishawaka 13GrCeP 
6 NaN Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) G... en-US,en;q=0.5 US Hammond YmtpnZ 
7 NaN Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_5 li... en-us None NaN 13oM0hV 
8 NaN Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like ... en-us AU Sydney 15r91 
9 NaN Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi... en-US,en;q=0.8 None NaN 109LtDc 
10 NaN Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like ... en-us US Middletown 109ar5F 
11 NaN Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like ... en-us US Germantown 107xZnW 
+0

Можете ли вы предоставить образец данных, демонстрирующий проблему? – BrenBarn

+0

Я добавил несколько строк строк выше. – kk415kk

ответ

9

Оказывается, что панды и Numpy лечения None особенно при сравнении равенства. В пандах None должен быть как NaN, представляя недостающее значение. Чтобы найти строки, где значение не равно None (или nan), вы можете сделать data_df[data_df.c.notnull()] (или data_df[~data_df.c.isnull()]).

+2

немного более читабельны, чтобы использовать 'notnull' so' data_df [data_df.c.notnull()] ' – EdChum

Смежные вопросы