2016-08-08 2 views
1

Вот в моем коде я прочитал данные из CSV:Почему pandas.Dataframe.drop() возвращает None?

data = pandas.read_csv('dataset/job_functions.csv', names=["job","category"] ,skiprows=1).dropna().reindex() 
num_jobs = data["job"].size 

Тогда я хочу, чтобы отбросить строки, которые ярлык «категория» не равен i:

data = data.drop(data[data.category!=i].index,inplace = True) 
print(data.head()) 

Даже сбросив список индекса возвращает None:

data = data.drop(data.index[[1,2,3]],inplace = True) 

сообщение об ошибке:

Traceback (most recent call last): 
File "sample.py", line 162, in 
    delete_common_words(27) 
File "sample.py", line 92, in delete_common_words 
    print(data.head()) 
AttributeError: 'NoneType' object has no attribute 'head' 

Вот данные, пока я не использовать drop():

            job category 
0 офис менеджер реализация гербицидовоформлени...   2 
1 менеджер отдел продажа работа с существующий...  27 
2 ведущий бухгалтер работа с вендер и поставщи...   1 
3 менеджер по продажа и продвижение продукт ус...  27 
4 юрист проведение юридический экспертиза прое...  13 
+5

Но вы прошли 'Inplace = true' так он будет возвращать' None' это правильное поведение, если вы установите 'Inplace = false' он будет возвращать модифицированный ДФ – EdChum

+0

Чтобы добавить к выше комментария вы обнаружите, что соответствующие строки были легированы из вашего фрейма. – kpie

ответ

1

Похоже, необходимость boolean indexing:

import pandas as pd 

data = pd.DataFrame({'category':['a','b', 'c']}) 
print (data) 
    category 
0  a 
1  b 
2  c 

i = 'a' 
print (data[data.category != i]) 
    category 
1  b 
2  c 

print (data[~data.category.isin(['b','c'])]) 
    category 
0  a 

И как EdChum объясняет, если использование inplace=True это возвращение None, так что вы можете использовать :

#omit inplace=True 
data = data.drop(data[data.category!=i].index) 

Или:

#remove assigning 
data.drop(data[data.category!=i].index,inplace = True) 
Смежные вопросы