我从一个数据帧值创建了两个数据帧。我正在修改两个数据帧,以使它们按索引具有一些nan行。但是,我可以将nan分配给数据框之一。当我对另一个对象执行相同的操作时,所有三个数据帧都变为nan。
我尝试使用dataframe.values而不是原始数据帧来创建新的数据帧,因为我知道如果让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
答案 0 :(得分:0)
第一个分配将ss_index
的值设置为np.nan
,它们只是索引[5,111,145,146,147]
。第二个将nss_index
索引设置为np.nan
,这是与ss_index
不同的索引,基本上是所有其余索引。由于df2
和df3
只是对df1
的引用,因此,当您修改其中一个时,它们全部都会被修改。
您可以使用.copy()
方法在数据框中创建值的副本,
df2 = df1.copy(deep=True)
现在,df2
不会受到df1
的更改的影响