我有一个数据框,其中包含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/ 主要。py:14:SettingWithCopyWarning: 试图在DataFrame的切片副本上设置一个值。 尝试改用.loc [row_indexer,col_indexer] =值
请参阅文档中的警告: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
答案 0 :(得分:0)
尝试在数据框副本上设置值时,经常会收到此警告。您的代码中唯一可能发生这种情况的地方是
dfabovemax['YtoDt'] = list(ytodt2)
这意味着dfabovemax很可能是另一个数据帧的结果。在python中,dfabovemax仍在引用其原始数据帧。为了纠正这种情况,请在制作dfabovemax时使用copy()。