当使用iloc在pandas系列中设置值时,我会收到SettingWithCopyWarning。我使用的是pandas 0.21.1和python 3.6.7
import pandas as pd
from datetime import datetime
from pytz import timezone
tz = timezone('CET')
ambiguous_dst = True
expected_dt_series = pd.Series([
datetime(2018, 10, 28, 1),
datetime(2018, 10, 28, 2),
datetime(2018, 10, 28, 3),
datetime(2018, 10, 28, 4),
])
expected_dt_series = expected_dt_series.dt.tz_localize(
tz, ambiguous='NaT')
expected_dt_series.iloc[1] = tz.localize(
datetime(2018, 10, 28, 2), is_dst=ambiguous_dst) # <- line that causes error
expected_dt_series = expected_dt_series.astype('object')
输出:
SettingWithCopyWarning: modifications to a method of a datetimelike object are not supported and are discarded. Change values on the original.
self._setitem_with_indexer(indexer, value)
x.py:17: SettingWithCopyWarning: modifications to a method of a datetimelike object are not supported and are discarded. Change values on the original.
datetime(2018, 10, 28, 2), is_dst=ambiguous_dst)
- 为什么会发生这种情况?我正在原始系列中设置一个值
- 我该怎么做才能避免这种情况?(除关闭警告外(
真正造成问题的是这个部分:
expected_dt_series = expected_dt_series.dt.tz_localize(tz, ambiguous='NaT')
使用copy
明确告诉熊猫这是它自己的系列
expected_dt_series = expected_dt_series.dt.tz_localize(
tz, ambiguous='NaT').copy()
expected_dt_series.iloc[1] = tz.localize(
datetime(2018, 10, 28, 2), is_dst=ambiguous_dst)