【发布时间】: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