【问题标题】:Cutting a DataFrame with pandas.iloc doesn't change its copied variable? (Copied with "=" not pd.copy())用 pandas.iloc 切割 DataFrame 不会更改其复制的变量? (用“=”而不是 pd.copy() 复制)
【发布时间】:2022-07-07 19:22:17
【问题描述】:

我有一个 DataFrame df

s = pd.Series([3, 4, 5], ['earth', 'mars', 'jupiter'])
k = pd.Series([1, 2, 3], ['earth', 'mars', 'jupiter'])
df = pd.DataFrame({'mass': s, 'diameter': k})
         mass  diameter
earth       3         1
mars        4         2
jupiter     5         3

我将df 复制到一个新变量df2 使用:

df2 = df

以下更改将同时适用于 dfdf2。这是可以理解的。

df["mass"]["earth"] = 100

但是下一个更改只会应用一个 DataFrame:

df = df.iloc[:2,:]

有人可以解释这种行为吗?非常感谢。

【问题讨论】:

  • df2 = df 不会复制,您需要df2 = df.copy()。同样,df = df.iloc[:2,:] 不会就地修改df,而是将df 名称分配给新的数据框df.iloc[:2,:]

标签: python python-3.x pandas


【解决方案1】:
df2 = df.copy()

使用这个做一个单独的副本,否则它们都指向内存中的相同数据

【讨论】:

    【解决方案2】:

    当你这样做时:

    df2 = df
    

    df2 和 df 都指向同一个对象。

    如果您要修改一个(df.loc["earth", "mass"] = 100),“另一个”(实际上相同)将被修改。

    但是当你这样做时:

    df = df.iloc[:2,:]
    

    df2 仍然指向原始数据帧,而 df 现在指向新对象(df.iloc[:2,:] 切片)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多