如何让Pandas中CREATED_AT列继承索引的日期部分?
替换Pandas Datetime列的日期部分(保留时分秒)
问题场景
现有如下Pandas DataFrame:
import pandas as pd data = { 'CREATED_AT': ['2022-01-01 07:30:00', '2022-01-01 07:30:00'], 'COUNT': [5, 10] } df = pd.DataFrame(data, index=['1990-01-01', '1990-01-02'])
索引为日期字符串,CREATED_AT列的datetime值日期部分完全相同,需要将CREATED_AT的日期部分替换为对应行的索引日期,保留原有的时分秒,期望结果:
CREATED_AT COUNT 1990-01-01 1990-01-01 07:30:00 5 1990-01-02 1990-01-02 07:30:00 10
尝试操作时出现错误:无法添加DatetimeArray与DatetimeArray
解决方案
步骤1:统一datetime类型
先将索引和CREATED_AT列转换为datetime类型(若原本不是):
df.index = pd.to_datetime(df.index) df['CREATED_AT'] = pd.to_datetime(df['CREATED_AT'])
方法1:矢量化时间偏移法(推荐)
计算原CREATED_AT的当日时间偏移量(即从当天0点到该时间的时长),再将偏移量加到索引日期上:
# 获取原时间的当日偏移量(Timedelta类型) time_offset = df['CREATED_AT'] - df['CREATED_AT'].dt.floor('D') # 将偏移量与索引日期相加,生成新的datetime df['CREATED_AT'] = df.index + time_offset
该方法为矢量化操作,处理大数据集时效率更高,无字符串拼接的额外开销。
方法2:字符串拼接法
提取原时间的时分秒字符串,与索引日期拼接后转换为datetime:
# 提取时分秒部分 time_str = df['CREATED_AT'].dt.strftime('%H:%M:%S') # 拼接日期与时分秒,转为datetime df['CREATED_AT'] = pd.to_datetime(df.index.strftime('%Y-%m-%d') + ' ' + time_str)
错误原因
直接对两个DatetimeArray执行加法操作是Pandas不允许的——datetime之间的加法没有明确业务意义。正确逻辑是将其中一方转换为时间差(Timedelta),再与另一方的datetime对象相加。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

