Pythond Pandas Dataframe по ссылке, но как насчет .dropna () - PullRequest
0 голосов
/ 24 января 2020

Я думал, что понял, что назначение второго df работает со ссылкой / указателем. Таким образом, в приведенном ниже коде первый элемент меняется на «оба» df. Но то, что происходит с .dropna (), было для меня неожиданным. Кажется, каким-то образом этот метод создает копию. Кто-нибудь знает, как это работает и почему? Смотрите вторую часть кода. Я ожидал, что два ДФ изменились.

df1 = pd.DataFrame([1, np.NaN, 2, 3, 5, np.NaN])
df2 = df1
df3 = df1

df2.iloc[0, 0] = 9
#Both changed
display(df1)
display(df2)

df3 = df3.dropna()

#Only df3 changed ??
display(df1)
display(df3)

1 Ответ

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

Когда вы делаете

df2.iloc[0, 0] = 9

, операция на месте. Кроме того, до сих пор df2 и df3 являются копиями df1, и любая модификация будет влиять на df1.
Но когда вы делаете

df3 = df3.dropna()

, здесь df3 присваивается представление возвращенного фрейма данных, а не копия. Так что, как видно, никакого влияния на df1 нет. Но если бы вы сделали следующее:

df3.dropna(inplace=True)

df3 был бы изменен на месте и, поскольку он является копией df1, df1 также был бы изменен таким же образом.
См. Какие правила Pandas использует для генерации представления против копии? для подробностей.

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