Pandas 2.2.0如何无字符串拼接合并日期时间列?
问题描述
我的CSV文件示例如下:
date, time, value 20240112,085917,11 20240112,085917,22
我之前用以下代码将其导入DataFrame:
df = pd.read_csv(csv_file, parse_dates=[['date', 'time']]).set_index('date_time')
得到的结果结构如下:
date_time value 2023-10-02 10:00:00 11 2023-10-02 10:01:00 22
升级到Pandas 2.2.0后,收到了如下警告:
FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
现在我只能通过字符串拼接的方式实现相同效果,但这种方法速度通常很慢:
df['datetime'] = df.date.astype(str) + ' ' + df.time.astype(str) df['datetime'] = pd.to_datetime(df.datetime, format="%Y%m%d %H%M%S") df = df.drop(['date', 'time'], axis=1).set_index('datetime')
请问在新版Pandas中,有没有无需字符串拼接的实现方法?
解决方案
有,你可以直接利用pd.to_datetime接收多列参数的特性,避免字符串拼接,效率会高很多:
df = pd.read_csv(csv_file) df['datetime'] = pd.to_datetime(df[['date', 'time']], format="%Y%m%d %H%M%S") df = df.drop(['date', 'time'], axis=1).set_index('datetime')
这个方法让pd.to_datetime直接处理两列的数值,内部会高效合并日期和时间信息,不需要手动做字符串拼接。
如果偏好链式写法,也可以一步完成导入和索引设置:
df = (pd.read_csv(csv_file) .assign(datetime=pd.to_datetime(df[['date', 'time']], format="%Y%m%d %H%M%S")) .drop(['date', 'time'], axis=1) .set_index('datetime'))
内容的提问来源于stack exchange,提问作者user164863
相关产品推荐
相关产品推荐

