python - 从值列表中分配新列的值警告大型数据集 - Pandas
问题描述
我有一个这样的数据框列表:
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] = value
请参阅文档中的注意事项:http: //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
任何想法为什么我会收到此复制错误。我浏览了提供的链接,它谈到了一个已经存在的列,在这种情况下我可以使用.loc
. 就我而言,我正在创建一个新列并分配值。
解决方案
如果您的 Datafamedf
本身是其他的子 DataFrame parent_df
,这
SettingWithCopyWarning
通常是由类似df["Year"] = j
或什至的行触发的df.loc[:, "Year"] = j
。只要你不是试图用df["Year"] = j
一种方式来修改parent_df
,你总是可以放心地忽略
SettingWithCopyWarning
。
如果您不想看到警告,您可以通过设置全局静音它
pd.options.mode.chained_assignment = None
推荐阅读
- reactjs - 使用 create-react-app 为反应应用程序配置 jest 和酶
- symfony - Symfony 版本从 3.4 升级到 4.3 使用旧的文件夹结构和错误
- node.js - 节点 - 查找任意变量的值
- javascript - 如何在 epoch js 中执行代码,因为我是新手,我想执行一些示例图表,任何人都可以帮助找到结果
- reporting-services - SSRS 抑制导出 CSV 中的空白行
- docker - 如何防止和回收 /var/lib/docker/overlay2/hash/merged 上的 Docker EC2 磁盘空间?
- c# - 如何在没有硬编码的情况下删除文件夹的所有拒绝权限?
- java - 使用 Spark 和 Java 读写不同的 Mongo 集合
- java - 在 Java 中,如何将 JSON 或 XML 的字符串映射到同一个 POJO,但 XML 的字段/属性名称与 JSON 不同?
- c++ - 线程继续运行并执行命令