您可以使用该功能tz_localize来创建一个时间戳或DateTimeIndex时区知道,但你怎么能反其道而行之:你怎么能转换时区了解时间戳天真的一个,同时保持其时区?
一个例子:
In [82]: t = pd.date_range(start="2013-05-18 12:00:00", periods=10, freq='s', tz="Europe/Brussels")
In [83]: t
Out[83]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: S, Timezone: Europe/Brussels
Run Code Online (Sandbox Code Playgroud)
我可以通过将时区设置为None来删除时区,但结果将转换为UTC(12点钟变为10):
In [86]: t.tz = None
In [87]: t
Out[87]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 10:00:00, ..., 2013-05-18 10:00:09]
Length: 10, Freq: S, Timezone: None
Run Code Online (Sandbox Code Playgroud)
有没有另一种方法我可以将DateTimeIndex转换为时区naive,但保留时区设置为?
关于我问这个问题的一些背景:我想使用timezone天真的时间序列(为了避免时区的额外麻烦,我不需要它们用于我正在处理的情况).
但出于某种原因,我必须在当地时区(欧洲/布鲁塞尔)处理时区感知的时间序列.正如我的所有其他数据时区天真(但在我的本地时区代表),我想这个时间序列转化为天真的进一步工作与它,但它也有在我的本地时区来表示(所以刚取出时区信息,不将用户可见时间转换为UTC).
我知道时间实际上是内部存储为UTC,并且只有当你表示它时才转换为另一个时区,因此当我想要"离域化"时必须进行某种转换.例如,使用python datetime模块,您可以像这样"删除"时区:
In [119]: d = pd.Timestamp("2013-05-18 12:00:00", tz="Europe/Brussels")
In [120]: d
Out[120]: <Timestamp: 2013-05-18 12:00:00+0200 CEST, tz=Europe/Brussels>
In [121]: …Run Code Online (Sandbox Code Playgroud) 我有两个日期时间列,当我将它们读入内存但实际上在美国/东部时它们是天真的.我只想将这两列转换为US/Central.
我发现了一种有效的方法,但似乎我正在做一个解决方法.我将call_start和call_end列改为名为'start'和'end',因此我最终没有重复的列名.然后,我为每个列创建了一个单独的datetimeindex并重置索引.
aht.set_index(pd.DatetimeIndex(aht['start']).tz_localize('US/Eastern').tz_convert('US/Central'), inplace = True, drop = True)
aht.index.names = ['call_start']
aht = aht.reset_index()
aht.set_index(pd.DatetimeIndex(aht['end']).tz_localize('US/Eastern').tz_convert('US/Central'), inplace = True, drop = True)
aht.index.names = ['call_end']
aht = aht.reset_index()
Run Code Online (Sandbox Code Playgroud)
我最终得到:
call_end call_start start end
2016-01-13 06:05:01-06:00 2016-01-13 06:02:00-06:00 01/13/2016 07:02 01/13/2016 07:05
2016-01-13 06:07:00-06:00 2016-01-13 06:03:16-06:00 01/13/2016 07:03 01/13/2016 07:07
2016-01-13 06:09:13-06:00 2016-01-13 06:06:02-06:00 01/13/2016 07:06 01/13/2016 07:09
2016-01-13 06:17:51-06:00 2016-01-13 06:06:20-06:00 01/13/2016 07:06 01/13/2016 07:17
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?所有其他数据都在中央时间,所以我只是想确保这个文件太合并,当我将文件合并在一起时更有意义.我不关心那里有实际的时区标记 - 有没有办法在我创建新列后轻松剥离它?