Python 熊猫:将区域设置设置为CSV文件中本地时间不明确的数据帧

Python 熊猫:将区域设置设置为CSV文件中本地时间不明确的数据帧,python,pandas,Python,Pandas,我读取的CSV文件的本地时间不明确——由于夏令时的原因,不明确 当我应用tz_localize()时,我运行以下错误: AmbiguousTimeError: There are %i dst switches when there should only be 1. 这是我重现错误的代码。请注意,由于夏时制,每个日期时间从凌晨2点到凌晨3点是重复的 index=pd.DatetimeIndex(['2018-10-28 01:00:00','2018-10-28 01:15:00', '20

我读取的CSV文件的本地时间不明确——由于夏令时的原因,不明确

当我应用
tz_localize()
时,我运行以下错误:

AmbiguousTimeError: There are %i dst switches when there should only be 1.
这是我重现错误的代码。请注意,由于夏时制,每个日期时间从凌晨2点到凌晨3点是重复的

index=pd.DatetimeIndex(['2018-10-28 01:00:00','2018-10-28 01:15:00',
'2018-10-28 01:30:00', '2018-10-28 01:45:00',
'2018-10-28 02:00:00', '2018-10-28 02:00:00',
'2018-10-28 02:15:00', '2018-10-28 02:15:00',
'2018-10-28 02:30:00', '2018-10-28 02:30:00',
'2018-10-28 02:45:00', '2018-10-28 02:45:00',
'2018-10-28 03:00:00', '2018-10-28 03:15:00',
'2018-10-28 03:30:00', '2018-10-28 03:45:00',
'2018-10-28 04:00:00'],freq='infer')
数据=列表(范围(长度(索引)))
df=pd.DataFrame(数据=数据,索引=索引)
df.index=df.index.tz_本地化('Europe/Berlin',含糊不清的='infer')
我不太明白为什么即使参数
不明确的class='infer'
也会出现错误
我的数据帧是否必须以任何方式进行排序
如何使用
pd.read\u csv()

我希望对CSV文件的顺序应用
模糊的
。确切地说,我的意思是:模糊时间格式的顺序有助于区分夏季和冬季

index.tz_localize('Europe/Berlin', ambiguous=np.array([True]*17))

我很高兴能得到解决方案的帮助和更广泛的解释。我找不到多少关于顺序如何在数据帧中发挥作用的信息——有时会这样吗?

按照存储数据的方式,根本没有足够的信息来推断哪个日期时间值属于夏季时间,哪个属于冬季时间

一种简单的方法是说您的日期时间值不明确,只需在最后一行设置
dimensional=True
,而不是
dimensional='infer'

df.index = df.index.tz_localize('Europe/Berlin', ambiguous=True)

这将导致凌晨3点之前的所有时间都分配给夏季时间,而不是在夏季和冬季时间之间分割重复值。

按照您存储数据的方式,根本没有足够的信息来推断哪个日期时间值属于夏季时间,哪个属于冬季时间

index.tz_localize('Europe/Berlin', ambiguous=np.array([True]*17))
一种简单的方法是说您的日期时间值不明确,只需在最后一行设置
dimensional=True
,而不是
dimensional='infer'

df.index = df.index.tz_localize('Europe/Berlin', ambiguous=True)
这将导致将凌晨3点之前的所有时间指定给夏季时间,而不是在夏季和冬季时间之间拆分重复值

index.tz_localize('Europe/Berlin', ambiguous=np.array([True]*17))
我认为您的一些dst时间需要推断,但您有重复的时间索引导致推断失败,使用可选的np.array将起作用


我认为需要推断一些dst时间,但是重复的时间索引会导致推断失败,使用可选的np.array将起作用。

您在提供的示例数据集中看到的问题是由数据顺序引起的。
dimensional='expert'
选项要求行按正确的时间顺序排列,您的示例数据的行在DST更改前后交替。以下代码起作用,仅更改索引中时间的初始顺序

index = pd.DatetimeIndex(['2018-10-28 01:00:00', '2018-10-28 01:15:00',
                          '2018-10-28 01:30:00', '2018-10-28 01:45:00',
                          '2018-10-28 02:00:00', '2018-10-28 02:15:00', 
                          '2018-10-28 02:30:00', '2018-10-28 02:45:00', 
                          '2018-10-28 02:00:00', '2018-10-28 02:15:00',
                          '2018-10-28 02:30:00', '2018-10-28 02:45:00',
                          '2018-10-28 03:00:00', '2018-10-28 03:15:00',
                          '2018-10-28 03:30:00', '2018-10-28 03:45:00',
                          '2018-10-28 04:00:00'], freq='infer')

data = list(range(len(index)))

df = pd.DataFrame(data=data,index=index)
df.index = df.index.tz_localize('Europe/Berlin', ambiguous='infer')

您在提供的示例数据集中看到的问题是由数据顺序引起的。
dimensional='expert'
选项要求行按正确的时间顺序排列,您的示例数据的行在DST更改前后交替。以下代码起作用,仅更改索引中时间的初始顺序

index = pd.DatetimeIndex(['2018-10-28 01:00:00', '2018-10-28 01:15:00',
                          '2018-10-28 01:30:00', '2018-10-28 01:45:00',
                          '2018-10-28 02:00:00', '2018-10-28 02:15:00', 
                          '2018-10-28 02:30:00', '2018-10-28 02:45:00', 
                          '2018-10-28 02:00:00', '2018-10-28 02:15:00',
                          '2018-10-28 02:30:00', '2018-10-28 02:45:00',
                          '2018-10-28 03:00:00', '2018-10-28 03:15:00',
                          '2018-10-28 03:30:00', '2018-10-28 03:45:00',
                          '2018-10-28 04:00:00'], freq='infer')

data = list(range(len(index)))

df = pd.DataFrame(data=data,index=index)
df.index = df.index.tz_localize('Europe/Berlin', ambiguous='infer')

谢谢但我正在寻找一种不同于夏季和冬季的解决方案。我认为主要问题是数据根本不包含您试图提取的信息<代码>2018-10-28 2:15:00
可以指两个时间点,就是这样。如果你想在时间上区分这两个时间点,你必须用一些夏季和冬季时间的概念来丰富数据。但我正在寻找一种不同于夏季和冬季的解决方案。我认为主要问题是数据根本不包含您试图提取的信息<代码>2018-10-28 2:15:00可以指两个时间点,就是这样。如果你想在时间上区分这两个时间点,你必须用夏季和冬季时间的概念来丰富数据谢谢和抱歉,但是像@KenHBS一样,你的解决方案在夏季和冬季之间没有区别。谢谢和抱歉,但是像@KenHBS一样,你的解决方案在夏季和冬季之间没有区别。