python - 我将值列表分配给新列并收到警告 SettingWithCopyWarning:
问题描述
我有一个数据框,其中包含 2015 年的月份和日期。我将年初至今的值计算到一个列表中。我将此列表分配给数据框中的一个新列,但收到一条警告 SettingWithCopyWarning。我该如何解决它以及为什么会发生这种情况的一些解释。提前谢谢大家。
print(dfabovemax.head())
print(dfabovemax.tail())
MaxTemp Data_Value
Mon-Date
01-02 114 113
01-10 142 126
04-10 213 203
04-15 246 228
05-03 203 195
MaxTemp Data_Value
Mon-Date
01-02 114 113
01-10 142 126
04-10 213 203
04-15 246 228
05-03 203 195
fmt = '%Y-%m-%d'
ytodt2 = []
for i in dfabovemax.index:
s='2005-{}'.format(i)
dt = datetime.datetime.strptime(s, fmt)
tt = dt.timetuple()
ytodt2.append(tt.tm_yday)
dfabovemax['YtoDt'] = list(ytodt2)
我收到警告
/opt/conda/lib/python3.6/site-packages/ipykernel/ main .py:14:SettingWithCopyWarning:试图在 DataFrame 的切片副本上设置值。尝试改用 .loc[row_indexer,col_indexer] = value
请参阅文档中的注意事项:http: //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
print(dfabovemax.head())
print(dfabovemax.tail())
MaxTemp Data_Value YtoDt
Mon-Date
01-02 114 113 2
01-10 142 126 10
04-10 213 203 100
04-15 246 228 105
05-03 203 195 123
MaxTemp Data_Value YtoDt
Mon-Date
12-25 140 135 359
12-26 152 130 360
12-27 138 118 361
12-28 134 124 362
12-30 134 128 364
解决方案
尝试在数据框的副本上设置值时,您经常会收到此警告。您的代码中唯一可能发生这种情况的地方是
dfabovemax['YtoDt'] = list(ytodt2)
这意味着,dfabovemax 很可能是另一个数据帧的结果。在 python 中, dfabovemax 仍然引用它的原始数据帧。为了纠正这种情况,请在制作 dfabovemax 时使用copy() 。
推荐阅读
- html - CSS :hover 抽搐
- simple-injector - 使用非泛型接口装饰类,其中装饰器依赖于接口,而不是类
- haskell - 在 Haskell 中为命令式语言编写解释器
- julia - Julia“没有方法匹配 supports_default_copy_to(::GLPK.Optimizer, ::Bool)”声明模型
- javascript - 将按钮插入 Popover 不起作用
- excel - Excel 64 位返回“找不到文件:UKRM_EncodeEIB_D.dll.dll”
- c - 如何在 C 中编写代码来检查字符串中的重复单词并计算它们的出现次数?
- javascript - 将输入文本连接到滑块
- r - 尝试在 R 中安装快速 qc
- linux - 登录时拒绝 Docker 权限以及我尝试的一切