如何计算DataFrame中两个Solar Hijri日期字符串列差值
太阳回历字符串列计算时间差实现方案
实现思路
pandas默认的日期解析工具仅支持公历,无法直接识别Solar Hijri(太阳回历/波斯历)格式的日期字符串,需要先借助专门的回历处理库将字符串转为可运算的日期时间对象,再直接做差得到时间差。
操作步骤
- 安装依赖库
首先安装专门处理太阳回历的jdatetime库,执行命令:pip install jdatetime - 编写转换逻辑并计算差值
完整可运行代码如下:import pandas as pd import jdatetime # 构造和给出结构一致的测试数据 df = pd.DataFrame({ 'ft': ['1401/04/21 13:36:00', '1401/04/21 14:00:00'], 'rt': ['1401/04/21 13:09:16', '1401/04/21 13:00:00'] }) # 定义太阳回历字符串转日期对象的函数 def parse_solar_hijri(s): return jdatetime.datetime.strptime(s, '%Y/%m/%d %H:%M:%S') # 转换两列为可运算的日期类型 df['ft'] = df['ft'].apply(parse_solar_hijri) df['rt'] = df['rt'].apply(parse_solar_hijri) # 直接相减得到ft - rt的时间差 df['time_diff'] = df['ft'] - df['rt']
结果说明
运行后得到的time_diff列为标准时间差类型,对应测试数据结果为:
- 第0行:26分钟44秒
- 第1行:1小时
如果需要提取指定单位的差值,可以直接调用时间差的属性计算:
- 总秒数:
df['time_diff'].dt.total_seconds() - 总分钟数:
df['time_diff'].dt.total_seconds() / 60 - 总小时数:
df['time_diff'].dt.total_seconds() / 3600
注意:不要直接使用
pd.to_datetime()转换这两列,该方法默认按公历解析日期,会得到错误的解析结果。
内容的提问来源于stack exchange,提问作者alireza
相关产品推荐
相关产品推荐

