我有一个 Pandas DataFrame,其中基于 time_zone
列将 hour
转换为 local_hour
。我现在想从 local_hour
中提取日期作为 local_date
,但收到一条错误消息,提示 Tz-aware datetime.datetime 无法转换为 datetime64,除非 utc=True
。我怎样才能做到这一点?
# Create dataframe
import pandas as pd
df = pd.DataFrame({
'hour': ['2019-01-01 05:00:00', '2019-01-01 07:00:00', '2019-01-01 08:00:00'],
'time_zone': ['US/Eastern', 'US/Central', 'US/Mountain']
})
# Convert hour to datetime and localize to UTC
df['hour'] = pd.to_datetime(df['hour']).dt.tz_localize('UTC')
# Get local_hour
df['local_hour'] = df.apply(lambda row: row['hour'].tz_convert(row['time_zone']), axis=1)
# Try to get local_date from local_hour
df['local_date'] = pd.to_datetime(df['local_hour'].dt.date)
ValueError: Tz-aware datetime.datetime cannot be converted to datetime64 unless utc=True
最佳答案
似乎只有当您的 local_hour
列包含不同时区时才会出现此问题。如果一切都在同一时区,这会起作用:
# Work: the whole column in a single timezone
df['local_hour'] = df['hour'].dt.tz_convert('America/New_York')
df['local_hour'].dt.date
# Not work: column contains a mix of timezones
df['local_hour'] = df.apply(lambda row: row['hour'].tz_convert(row['time_zone']), axis=1)
df['local_hour'].dt.date
ValueError: Tz-aware datetime.datetime cannot be converted to datetime64 unless utc=True
我建议您向 pandas 团队提出问题。同时,您可以使用 apply
,它本质上是一个循环:
tmp = df['local_hour'].apply(lambda t: pd.Series({
'date': t.date(),
'hour': t.hour
}))
df = pd.concat([df, tmp], axis=1)
关于python - 从 Pandas 中多个时区的时间戳中提取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57931272/