Не могу обойтись Набором Панд

Я хотел бы получить 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 > Получение и настройка параметров

Другие вопросы по тегам