我得到的每日报告包括时间戳列和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'])
但是,我似乎无法弄清楚如何最好地引用偏移量列。总的来说,我对日期时间有点陌生,但是任何帮助都将不胜感激!
答案 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