繁体   English   中英

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

[英]Why the all dataframes become nan when I just assign nan to one of them

我从一个数据帧值创建了两个数据帧。 我正在修改两个数据框,以便它们按索引有一些 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

新编辑: .copy 是一个超级有用的属性。 numpy、pandas 和许多库都内置了 .copy。如果没有,可以导入 copy。

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

您可以使用.copy()方法在 Dataframe 中创建值的副本,

df2 = df1.copy(deep=True)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM