Не могу обойтись Набором Панд
Я хотел бы получить Series
и внести в него изменения, которые я хотел бы отразить в DataFrame
позже. Однако я не могу понять, как это сделать без SettingWithCopyWarning
, Это ложное срабатывание или я что-то не так делаю?
df = pd.DataFrame([[1,2,3],[4,5,6]], columns=list('abc'))
df['d'] = df['a'].diff()
d = df.loc[:, 'd']
d.loc[d>0] *= 3
Я прочитал документы (и да, я прочитал этот вопрос перед тем, как спросить, но он касается только DataFrames, а не Series), но не может решить, как это исправить. Я бы предпочел не отключать предупреждение, так как у меня есть код, в котором я не хочу, чтобы случайно совершить ошибку такого типа.
1 ответ
Я хотел бы получить серию и внести в нее изменения, которые я хотел бы отразить в DataFrame позже.
В этом случае вы должны временно отключить это предупреждение и продолжить работу, как сейчас. С помощью .copy()
будет означать ваш оригинал df
будет не смягчен изменениями d
,
with pd.option_context('mode.chained_assignment', None):
df = pd.DataFrame([[1,2,3],[4,5,6]], columns=list('abc'))
df['d'] = df['a'].diff()
d = df.loc[:, 'd']
d.loc[d>0] *= 3
# Code you run outside of `with` will maintain your original setting:
# pd.get_option('chained_assignment')
option_context
это менеджер контекста, то есть его можно использовать с with
, и эта опция применяется только к коду внутри блока.
Подробнее: pandas > Получение и настройка параметров