我有一个数据帧列周期,其中包含Quarters(Q1,Q2,Q3,Q4)的值,我希望将其转换为关联月份(请参阅dict)。我的下面的代码可以解释为什么我会收到此警告。
正在尝试在DataFrame的切片副本上设置值。 尝试使用.loc [row_indexer,col_indexer] = value而不是
quarter = {"Q1":"Mar","Q2":"Jun","Q3":"Sep","Q4":"Dec"}
df['period'] = df['period'].astype(str).map(quarter)
答案 0 :(得分:9)
"正在尝试在DataFrame"的切片副本上设置一个值。是一个警告。 SO包含很多关于这个主题的帖子。
在Pandas 0.16中添加了 df.assign
,这是避免此警告的好方法。
quarter = {"Q1": "Mar", "Q2": "Jun", "Q3": "Sep", "Q4": "Dec"}
df = pd.DataFrame({'period': ['Q1', 'Q2', 'Q3', 'Q4', 'Q5'], 'qtr': [1, 2, 3, 4, 5]})
df
period qtr
0 Q1 1
1 Q2 2
2 Q3 3
3 Q4 4
4 Q5 5
df = df.assign(period=[quarter.get(q, q) for q in df.period])
# Unmapped values unchanged.
>>> df
period qtr
0 Mar 1
1 Jun 2
2 Sep 3
3 Dec 4
4 Q5 5
df = pd.DataFrame({'period': ['Q1', 'Q2', 'Q3', 'Q4', 'Q5'], 'qtr': [1, 2, 3, 4, 5]})
df = df.assign(period=df.period.map(quarter))
# Unmapped values get `NaN`.
>>> df
period qtr
0 Mar 1
1 Jun 2
2 Sep 3
3 Dec 4
4 NaN 5
将新列分配给DataFrame,返回一个新对象 (副本)除了新的原始列之外还包含所有原始列。
.. versionadded :: 0.16.0