Pandas dataframe - настройка с предупреждением о копировании - PullRequest
0 голосов
/ 14 января 2020

Я хотел бы переслать ежечасный фрейм данных, чтобы значение часа 1 пересылалось для каждого часа 1 в последующие дни. То же самое для каждого из 24 часов.

Фрейм данных выглядит следующим образом:

Timestamp   input1  input2  input3
…   …   …   ..
01.01.2018 00:00    2   5   4
01.01.2018 01:00    3   3   2
01.01.2018 02:00    5   6   1
…           
01.01.2018 22:00    2   0   1
01.01.2018 23:00    5   3   3
02.01.2018 00:00    6   2   5
02.01.2018 01:00    3   6   4
02.01.2018 02:00    3   9   6
02.01.2018 03:00    5   1   7
…           
02.01.2018 23:00    2   5   1
03.01.2018 00:00    NaN NaN NaN
…           
03.01.2018 23:00    NaN NaN NaN

Для этого я использую следующий код:

   for hr in range(0,24):    
   df.loc[df.index.hour == hr, Inputs] = df.loc[df.index.hour == hr, Inputs].fillna(method='ffill')

Это работает , К сожалению, я получаю предупреждающее сообщение:

\Python\WPy-3670_32bit\python-3.6.7\lib\site-packages\pandas\core\indexing.py:543: SettingWithCopyWarning:  A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
 self.obj[item] = s

Как я могу решить эту проблему, чтобы я больше не получал предупреждение?

Полученный df должен быть заполнен NaN.

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Я выполнил ваш код и не получил упомянутое предупреждение (ни одно другое).

Использование lo c - это просто правильный способ избежать такого предупреждения (как сказано в этом сообщении).

Может быть, вы используете более старую версию Pandas? Обновите до 0,25 , если у вас более старая версия, и повторите попытку.

Еще одно подозрение: возможно, это предупреждение относится к какой-то другой инструкции в вашем коде ( без lo c)?

0 голосов
/ 14 января 2020

Это работает:

 df[df.index.hour == hr] = df[df.index.hour == hr].fillna(method="ffill")

Очень похоже на .lo c, но, как правило, не вызывает столько предупреждений Settingwithcopy.

...