在Panda系列中设置日期时间值时设置WithCopyWarning



当使用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)
  1. 为什么会发生这种情况?我正在原始系列中设置一个值
  2. 我该怎么做才能避免这种情况?(除关闭警告外(

真正造成问题的是这个部分:

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)

最新更新