Изменение значения в столбце фрейма данных в петле цикла - PullRequest
0 голосов
/ 05 мая 2018

Я новичок в библиотеке панд Python и использую фреймы данных. Я использую Jupyter. Я вроде потерял с этим синтаксисом.

Я хочу перебрать строки и установить новое значение в столбец new_value . Я думал, что сделаю это так, но возникает ошибка.

df_merged['new_value'] = 0

for i, row in df_merged.iterrows():
    df_merged['new_value'][i] = i

Я также пытался сделать расчет как:

 df_merged['new_value'][i] = df_merged['move_%'] * df_merged['value']

Но это не работает.

Я получаю эту ошибку:

/ USR / Библиотека / python3.4 / сайт-пакеты / ipykernel_launcher.py: 4: SettingWithCopyWarning: Значение пытается быть установлено для копии среза из DataFrame
См. Предостережения в документации: http://pandas.pydata.org/pandas- Docs / стабильный / indexing.html # индексирование ракурса-против-копии после удаления cwd из sys.path.

Что я здесь не так делаю?
Спасибо.

Ответы [ 5 ]

0 голосов
/ 28 ноября 2018

Для обновления цикла в pandas dataframe:

for i, row in df_merged.iterrows():
     df_merged.set_value(i,'new_value',i)

Должно быть в состоянии обновить значения в панде.

FutureWarning: set_value устарела и будет удалена в следующем выпуске. Пожалуйста, используйте вместо этого .at [] или .iat [] аксессоры.

for i, row in df_merged.iterrows():
     df_merged.at[i,'new_value'] = i

Должен быть предпочтительным.

0 голосов
/ 05 мая 2018

Это не ошибка. Это просто говорит о том, что фрейм данных _merged инициализируется как представление родительского daraframe и, следовательно, не является фреймом данных сам по себе, поэтому не может принимать значения. Вероятно, поэтому, когда вы проверяете значение объединенного фрейма данных после этого шага, оно остается таким же, как и оригинал. У вас есть два варианта: сделать сам фрейм _merged данных копией с помощью метода .copy (), когда вы инициализируете его из родительского фрейма данных. Или в цикле или вычислении задайте значения для родительского фрейма данных, используя те же вычисления или индексы, что и для объединенного фрейма данных. Я бы порекомендовал первый метод, потому что я не думаю, что память является ограничением для вас, и вы хотите, чтобы значения были изменены в новом фрейме данных. Плюс это так просто, как может быть.

0 голосов
/ 05 мая 2018

Если вы хотите выполнить умножение на два столбца, вам не нужно делать это по строкам, должно работать следующее:

df_merged['new_value'] = df_merged['move_%'] * df_merged['value']
0 голосов
/ 05 мая 2018

Это тоже хорошо работает:

df_merged['price_new'] = 0

for i, row in df_merged.iterrows():
     df_merged.loc[i,'price_new']  = i 
0 голосов
/ 05 мая 2018

Вы можете использовать только это:

df_merged['new_value'] = df.index

Вы также можете использовать apply метод.

df_merged['new_value'] = df_merged.apply(lambda row : row.name, axis=1)

Я получаю эту ошибку: пытаюсь установить значение для копии срез из фрейма данных

Это не ошибка, это просто предупреждающее сообщение.

С это ответ:

SettingWithCopyWarning был создан для пометки потенциально запутанных «цепочечных» назначений, таких как следующие, которые не всегда работают должным образом, особенно когда первый выбор возвращает копию.

Вы можете избежать этого предупреждения, используя метод pd.DataFrame.loc.

for i, row in df_merged.iterrows():
    df_merged.loc[i,'price_new']  = i 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...