为什么当我把nan分配给其中一个数据帧时,所有的数据帧都变成了nan

2024-06-15 22:44:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我从一个数据帧值创建了两个数据帧。我正在修改这两个数据帧,以便它们按索引有一些nan行。但是,我可以将nan分配给其中一个数据帧。当我对另一个数据帧做同样的操作时,所有三个数据帧都变成nan

我尝试使用dataframe.values而不是原始的dataframe来创建新的dataframes,因为我知道如果您让b=a,那么您对a所做的任何操作都将反映在b中。但它仍然不起作用

df1 = pd.read_csv(...)
df2 = pd.DataFrame(df1.values, index=df1.index, columns=['a'])
df3 = pd.DataFramd(df1.values, index=df1.index, columns=['a'])

results = [5,6,111,112,145,148] # an example for demonstration
ss_index = list(df1.index[5:6]) + list(df1.index[111:112]) + 
           list(df1.index[145:148])
nss_index = df1.index.difference(ss_index)

df2.loc[ss_index, :] = np.nan # this set all three dfs at ss_index to nan
df3.loc[nss_index, :] = np.nan # this sets all three dfs at nss_index to nan

Tags: columns数据dataframeindexnpnanssloc
1条回答
网友
1楼 · 发布于 2024-06-15 22:44:07

第一个赋值将ss_index值设置为np.nan,这只是索引[5,111,145,146,147]。第二种方法将nss_index索引设置为np.nan,这是与ss_index不同的索引,基本上是所有剩余的索引。因为df2df3只是对df1的引用,所以当您修改其中一个时,所有这些都会被修改

可以使用.copy()方法在数据帧中创建值的副本

df2 = df1.copy(deep=True)

现在,df2不会受到df1中的变化的影响

相关问题 更多 >