Python: нежелательное назначение - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть два фрейма данных и два списка фреймов данных. Я хочу сделать элемент dataframe "nan" через список, но копия также перезаписывается. Как я могу изменить только первый?

d
Out[302]: {'col1': [1, 2, 3], 'col2': [4, 5, 6]}

dftemp1 = pd.DataFrame(d)

dftemp2 = dftemp1

dftemp_l = [dftemp1, dftemp2]

dftemp_m = dftemp_l.copy()

dftemp_l[0][:] = np.nan

Вот чего я не хочу. Я хочу, чтобы это не изменилось.

dftemp_m[0]
Out[308]: 
   col1  col2
0   NaN   NaN
1   NaN   NaN
2   NaN   NaN

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Я думаю, это помогло бы немного узнать, чего вы пытаетесь достичь. Но, как уже отмечали другие, вы не делаете копии чего-либо. В большинстве этих операций вы работаете с одним и тем же исходным фреймом данных с несколькими ссылками на него.

Кроме того, не используйте 'l' и '1' для похожих имен переменных! Я использовал dftemp_L и dftemp_M ниже.

Просто предположите, что вы надеетесь достичь, ниже, вероятно, правильный способ сделать это.

d = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}

dftemp1 = pd.DataFrame(d)

dftemp2 = dftemp1.copy()

dftemp_L = [dftemp1, dftemp2]


# There are more pythonic ways to do this, but this explicitly shows what is happening:
dftemp_M = []
for my_df in dftemp_L:
    dftemp_M.append(my_df.copy())

dftemp_M[0][:] = np.nan
0 голосов
/ 16 апреля 2020

может быть вам нужна глубокая копия,

from copy import deepcopy
dftemp_m = deepcopy(dftemp_l)

копия из DataFrame

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