使用时间偏移列转换熊猫时间戳

时间:2019-07-12 14:17:47

标签: python pandas datetime utc timezone-offset

我得到的每日报告包括时间戳列和UTC偏移列。使用熊猫,我可以将int时间戳转换为datetime64类型。不幸的是,我不知道如何使用偏移量。

由于'UTC Offset'列是作为字符串输入的,因此我尝试将其转换为int来提供帮助,但无法弄清楚如何使用它。我尝试使用pd.offsets.Hour,但是不能使用偏移列。

df = pd.read_csv(filename, encoding='utf-8', delimiter=r'\t',engine='python')
df['Timestamp'] = pd.to_datetime(df[r'Stream Timestamp'],utc=True, unit='s')
print(df[:3][r'Stream Timestamp'])

0   2019-05-01 14:21:37+00:00
1   2019-05-01 15:50:12+00:00
Name: Stream Timestamp, dtype: datetime64[ns, UTC]

0    -06:00
1    +01:00
2    -04:00
Name: UTC Offset, dtype: object

df[r"UTC Offset"] = df[r"UTC Offset"].astype(int)

理想情况下,我想做这样的事情

df[r'Adjusted'] = df[r'Timestamp'] + pd.offsets.Hour(df[r'UTC Offset'])

但是,我似乎无法弄清楚如何最好地引用偏移量列。总的来说,我对日期时间有点陌生,但是任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:0)

也许不是最漂亮的,但是由于当您在csv中读取该对象时,可以将旧的偏移量去除,并将其与offset列组合为字符串。为此,读入时的所有时间戳都必须具有偏移量。如果他们不考虑,可能要检查字符串中是否有+或-,然后从那里开始。

然后转换为日期时间。我在format中加入了pd.to_datetime参数,只是这样做会更快,但是如果数据集很小,则不需要此参数。实际上,我对获取熊猫时区的信息有多么困难感到惊讶,但也许可以查看tzinfo?

为了便于理解,我在不同的列中包括了中间步骤,但是您当然不需要这样做。

df = pd.DataFrame({'timestamp_str': ['2019-05-01 14:21:37+00:00', 
                                     '2019-05-01 15:50:12+00:00', 
                                     '2019-05-01 15:50:12+00:00'],
                   'utc_offset': ['-06:00','+01:00','-04:00']})

df['timestamp_str_combine'] = df['timestamp_str'].str[:-6] + df['utc_offset']
df['timestamp'] = pd.to_datetime(df['timestamp_str_combine'], 
                                 format="%Y-%m-%d %H:%M:%S", utc=True)

df.info()

输出

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 4 columns):
timestamp_str            3 non-null object
utc_offset               3 non-null object
timestamp_str_combine    3 non-null object
timestamp                3 non-null datetime64[ns, UTC]
dtypes: datetime64[ns, UTC](1), object(3)
memory usage: 176.0+ bytes
相关问题