从值列表中指定新列的值警告大型数据集

2024-04-20 08:14:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧列表:

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: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

你知道我为什么会出现这种复印错误吗。我浏览了提供的链接,它讨论了一个已经存在的列,在这种情况下我可以使用.loc。在我的例子中,我创建一个新列并赋值。你知道吗


Tags: columnsofthe数据indataframedf列表
1条回答
网友
1楼 · 发布于 2024-04-20 08:14:54

如果Datafamedf本身是其他parent_df的子数据帧,那么 SettingWithCopyWarning通常由df["Year"] = j甚至df.loc[:, "Year"] = j这样的行触发。 只要您不试图使用df["Year"] = j作为修改parent_df的方法,就可以安全地忽略 SettingWithCopyWarning。你知道吗

如果您不希望看到警告,可以通过设置

pd.options.mode.chained_assignment = None

相关问题 更多 >