Pandas中如何补零合并日期时间并实现时间点减5小时?
解决方案
1. 手动补零并使用datetime.combine合并
假设你的CSV包含date(示例格式:2023-8-5)和time(示例格式:9:3)两列,可按以下逻辑批量处理:
先导入依赖模块:
import pandas as pd from datetime import datetime, timedelta
定义处理函数并应用到每一行:
def process_datetime(row): # 补零日期字符串,转换为date对象 year, month, day = row['date'].split('-') formatted_date = f"{year}-{month.zfill(2)}-{day.zfill(2)}" date_obj = datetime.fromisoformat(formatted_date).date() # 补零时间字符串,转换为time对象(默认补充秒为00) hour, minute = row['time'].split(':') formatted_time = f"{hour.zfill(2)}:{minute.zfill(2)}:00" time_obj = datetime.fromisoformat(formatted_time).time() # *合并日期与时间对象* combined_dt = datetime.combine(date_obj, time_obj) # 减去5小时 return combined_dt - timedelta(hours=5) # 生成调整后的日期时间列 data['adjusted_datetime'] = data.apply(process_datetime, axis=1)
2. 更高效的pandas原生方案(推荐)
无需手动调用datetime.combine,pandas可直接合并并解析日期时间字符串,自动处理补零逻辑:
# 合并日期和时间字符串,按指定格式解析为datetime data['combined_datetime'] = pd.to_datetime( data['date'] + ' ' + data['time'], format='%Y-%m-%d %H:%M' # 根据你的实际格式调整,比如月/日/年用%m/%d/%Y ) # 减去5小时 data['adjusted_datetime'] = data['combined_datetime'] - pd.Timedelta(hours=5)
关键提示
- 如果日期或时间格式有特殊变体(如包含秒、使用斜杠分隔),只需修改字符串拆分规则或
pd.to_datetime的format参数即可适配。 - 数据量较大时,优先使用pandas原生方法,比
apply循环的处理效率高得多。
内容的提问来源于stack exchange,提问作者AL B
相关产品推荐
相关产品推荐

