Pandas: Как работать с нарезанными данными, используя .lo c? - PullRequest
0 голосов
/ 05 августа 2020
df1 = pd.DataFrame({'id_imp': ['a', 'b', 
'c','d','e','f','g'], 
'name': ['jon', 'jon', 'tom', 'ber', 'gary','gary', 
'zul'],
'state' : ['ca', 'ny', 'tn','ca','tn','tn','il'],
'county': ['wood','wood','fair','bridge','rosewelt','rosewelt','lili']})

df2 = pd.DataFrame({'id_sal': ['h', 'i', 'j','k','l'], 
 'name': ['jon', 'zolie', 'tom', 'ber', 'gary'],
'state' : ['ca', 'ch', 'tn','ca','tn'],
'county': ['wood','plas','fair','bridge','rosewelt']})

df3 = df1.loc[(~df1.name.isin(df2.name))]

Я пытаюсь выполнить небольшую операцию, написав код ниже, но он выдает предупреждение: в чем может быть проблема?

df3['name'] = df3.loc[:, 'name'].fillna(0)

SettingWithCopyWarning: попробуйте использовать .loc [row_indexer , col_indexer] = вместо этого значение

1 Ответ

1 голос
/ 05 августа 2020

Это выглядит так:

df['name'] - возвращает совершенно новый объект, т.е. копию

Но вы хотите работать с исходным объектом. поэтому используйте:

df3.loc[:, 'name'] - который возвращает подмножество исходного объекта, то есть представление

df3.loc[:, 'name'] = df3['name'].fillna(0)

Если вы пытаетесь выбрать строки и столбцы в одной строке кода .loc[] работает лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...