python - 从 Pandas 中多个时区的时间戳中提取日期

标签 python pandas

我有一个 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/

相关文章:

python - django 模型继承 : How does model creation work with custom manager?

python - 更改 pandas DataFrame 中的特定列名

python - 在 python 中使用 pandas 加载 csv 文件

python - 制作具有多索引值的字典

python - 加快 Pandas 应用功能

python - 选择名称以保存 .csv 文件并使用在整个 python 脚本中输入的名称

python - 将圆投影到正方形上?

python - 将 .py 文件和图像转换为独立可执行文件

python - 如何更改Python中的全局变量?

python - 通过 pandas 绘图界面绘制带有第二个 y 轴的 pandas 数据框时设置图例位置