【问题标题】:Why the all dataframes become nan when I just assign nan to one of them当我将 nan 分配给其中一个时,为什么所有数据帧都变成 nan
【发布时间】:2020-02-22 04:56:59
【问题描述】:

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

【问题讨论】:

    标签: python dataframe


    【解决方案1】:

    第一个赋值将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 更改的影响

    【讨论】:

    • 谢谢!因此,即使我在创建 df2 和 df3 时使用 df1.values 将 df1 转换为数组,它们仍然是对 df1 的引用。这是如何工作的?
    猜你喜欢
    • 1970-01-01
    • 2015-05-10
    • 2013-07-01
    • 2020-03-12
    • 1970-01-01
    • 2022-08-14
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多