【问题标题】:Assigning New Column's Value From a List of Values Warning For Large DataSets - Pandas从值列表中分配新列的值警告大型数据集 - Pandas
【发布时间】:2018-07-06 20:04:08
【问题描述】:

我有一个这样的数据框列表:

sm = pd.DataFrame([["Forever", 'BenHarper'],["Steel My Kisses", 'Kack Johnson'],\
                  ["Diamond On the Inside",'Xavier Rudd'],[ "Count On Me", "Bruno Mars"]],\
                   columns=["Song", "Artist"])

pm = pd.DataFrame([["I am yours", 'Jack Johnson'],["Chasing Cars", 'Snow Patrol'],\
                  ["Kingdom Comes",'Cold Play'],[ "Time of your life", "GreenDay"]],\
                   columns=["Song", "Artist"])

df_list = [sm,pm]

现在,我想将另一个值列表作为新列分配给数据框列表中的数据框。

years = ["1999", "2003"]

我使用了以下代码,(它适用于较小的数据集)

df_with_year = []
for df in df_list:
    for j in years:
        df["Year"] = j
    df_with_year.append(df)

但是,当我对更大的数据集使用相同的逻辑时,我收到了一个错误:

SettingWithCopyWarning:试图在一个副本上设置一个值 从 DataFrame 切片。尝试使用 .loc[row_indexer,col_indexer] = 取而代之的价值

请参阅文档中的注意事项: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

我收到此复制错误的任何想法。我浏览了提供的链接,它谈到了一个已经存在的列,在这种情况下我可以使用.loc。就我而言,我正在创建一个新列并分配值。

【问题讨论】:

  • 这不是错误,只是警告。您是否检查过您的数据集是否以所需的方式进行了修改?
  • @xyzjayne 是的,我做到了。我唯一想到的就是分成更小的裂缝。一次可能需要 10 个数据帧。
  • @sacul 您使用枚举方法发布的答案更快,但仍然有警告!

标签: python python-3.x pandas replace


【解决方案1】:

如果您的 Datafame df 本身是其他 parent_df 的子 DataFrame,则此 SettingWithCopyWarning 通常由df["Year"] = j 甚至df.loc[:, "Year"] = j 之类的行触发。 只要您不尝试使用df["Year"] = j 作为修改parent_df 的方式,您始终可以放心地忽略 SettingWithCopyWarning.

如果您不想看到警告,您可以通过设置全局使其静音

pd.options.mode.chained_assignment = None

【讨论】:

  • 这很有意义!
猜你喜欢
  • 1970-01-01
  • 2019-10-05
  • 2023-02-23
  • 2020-03-19
  • 2015-07-14
  • 2016-09-06
  • 2018-09-09
  • 1970-01-01
  • 2021-06-22
相关资源
最近更新 更多