繁体   English   中英

Python pandas - 将日期和时间列加入带有时区的日期时间列

[英]Python pandas - join date & time columns into datetime column with timezone

我有一个包含日期列和时间列的数据集,我正在尝试将它们组合到 DateTime 列中,但我遇到了月份和日期部分被反转的问题

例如:

Date       Time
1/2/2019   3:29:59 PM
4/2/2019   9:15:59 AM

这些日期是 2019 年 2 月 1 日和 2 月 4 日。

当我将它们放入我的 DataFrame 并格式化它们时:

data = pd.read_csv('{}/{}.csv'.format(data_path,symbol), parse_dates=[['Date','Time']])
data.columns = map(str.lower, data.columns)
data['timedelta'] = pd.Series([pd.Timedelta(seconds=59) for i in range(len(data['date_time']))])
data['date_time'] = data['date_time'] - data['timedelta']
data = data.set_index('date_time').tz_localize('Asia/Kolkata')

我得到这个 output:

Datetime
2019-01-02 15:29:00+0530
2019-04-02 09:15:00+0530

如您所见,DateTime object 适用于 2019 年 1 月 2 日和 4 月 2 日。

感谢您帮助弄清楚如何正确格式化 DateTime 列。

首先,运行df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')更改日期格式。 然后,您可以合并您的日期和时间。 完整代码如下:

data = pd.read_csv('{}/{}.csv'.format(data_path,symbol), parse_dates=[['Date','Time']])
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
data.columns = map(str.lower, data.columns)
data['timedelta'] = pd.Series([pd.Timedelta(seconds=59) for i in range(len(data['date_time']))])
data['date_time'] = data['date_time'] - data['timedelta']
data = data.set_index('date_time').tz_localize('Asia/Kolkata')

在调用read_csv时,设置dayfirst=True以便正确解析日期。 使用dt.floor到分钟:

data = pd.read_csv(f'{data_path}/{symbol}.csv', parse_dates=[['Date','Time']], dayfirst=True)

data = data.set_index(data['Date_Time'].dt.floor('min')).tz_localize('Asia/Kolkata')

# need to drop col used as index separately here:
data = data.drop(['Date_Time'], axis=1)

阅读 csv 后将以下内容添加到您的代码中:

df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM