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)
我有一个包含日期列和时间列的数据集,我试图将它们合并到日期时间列中,但我遇到了月份和日期部分被颠倒的问题
例如:
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)