尝试在DataFrame的切片副本上设置值

oba*_*abs 8 python dictionary dataframe pandas

我有一个数据帧列周期,其中包含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)
Run Code Online (Sandbox Code Playgroud)

Ale*_*der 9

"正在尝试在DataFrame的切片副本上设置值"是一个警告.SO包含很多关于这个主题的帖子.

df.assign 已添加到Pandas 0.16中,是避免此警告的好方法.

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
Run Code Online (Sandbox Code Playgroud)

将新列分配给DataFrame,返回包含除新列之外的所有原始列的新对象(副本).

.. versionadded :: 0.16.0

  • 如果我想就地添加一列怎么办?例如,当在 DataFrame 列表上迭代方法内部时,我希望更改就地应用到输入列表。语法 `df['new_col'] = pd.Series(some_vals)` 按我想要的方式工作,但我仍然收到此警告 (3认同)