Python pandas - 将日期和时间列连接到带时区的日期时间列

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

我有一个包含日期列和时间列的数据集,我试图将它们合并到日期时间列中,但我遇到了月份和日期部分被颠倒的问题

例如:

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')

我得到这个输出:

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

如您所见,DateTime 对象适用于 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')

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

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

调用 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)