Как использовать loc для проблемы с копированием в python? - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть этот фрейм данных:

x = pd.read_csv(r'C:\Users\user\Desktop\Dataset.csv', sep = ',')
x['dates'] = pd.to_datetime(x['dates']) #turn column to datetime type
v = x[(x['proj'].str.contains('3'))] ### This part is causing the issue.

v['mnth_yr'] = v['dates'].apply(lambda x: x.strftime('%B-%Y'))     

и выдает это предупреждение:

Значение пытается быть установлено для копии среза из DataFrame. Пытаться используя .loc [row_indexer, col_indexer] = значение вместо

Я знаю, что есть пост об этом, но я не могу понять, как решить этот конкретный случай. Вы можете помочь?

На основании ответа:

x = pd.read_csv(r'C:\Users\user\Desktop\Dataset.csv', sep = ',')
x.loc[:,'dates'] = pd.to_datetime(x['dates']) #turn column to datetime type
v = x[(x['proj'].str.contains('3'))] ###This part is causing the issue.
                            ###And in the next line gives the warning, since it's a copy.
v.loc[:,'mnth_yr'] = v['dates'].apply(lambda x: x.strftime('%B-%Y'))  

По-прежнему выдает ошибку. Есть ли способ присвоить v без предупреждения?

1 Ответ

0 голосов
/ 17 сентября 2018

Вы всегда можете избавиться от предупреждения, используя .loc и указав столбец и все строки. Например,

x.loc[:, 'dates'] = pd.to_datetime(x['dates']) 
...
v.loc[:, 'mnth_yr'] = v['dates'].apply(lambda x: x.strftime('%B-%Y'))

Разница между ними заключается в том, что в вашем примере x['dates'] возвращает копию части фрейма данных, которая соответствует условному столбцу == 'date' (срез). Когда вы используете .loc, он восстанавливает фрагмент, а не копию. Как правило, это не проблема, если только вы не пытаетесь выполнить вложенную нарезку данных. В этом случае вложенные срезы без .loc не смогут обновить исходный фрейм данных. Подробнее смотрите здесь:

https://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy

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