Pandas解析含可变格式的亚秒级精度时间戳列问题
解决Pandas解析混合格式时间戳(整秒/亚秒)的原生高效方案
方法1:使用多格式列表(Pandas 1.3.0+推荐)
Pandas 1.3.0及以上版本支持给pd.to_datetime的format参数传入格式列表,会依次尝试每个格式进行转换,完全原生且性能最优:import pandas as pd # 方式1:读取CSV时直接解析时间列 df = pd.read_csv('your_dataset.csv', parse_dates=['timestamp'], format=['%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M:%S']) # 方式2:读取后单独处理时间列 df = pd.read_csv('your_dataset.csv') df['timestamp'] = pd.to_datetime(df['timestamp'], format=['%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M:%S'])这个方法无需额外逻辑,Pandas底层会批量处理所有匹配的格式,性能接近单一格式解析的速度。
方法2:分两步转换(兼容低版本Pandas)
如果你的Pandas版本低于1.3.0,可以先尝试解析亚秒格式,再用整秒格式填充转换失败的NaT值,全程用原生操作避免循环:import pandas as pd df = pd.read_csv('your_dataset.csv') # 先尝试解析亚秒格式,失败的转为NaT df['timestamp'] = pd.to_datetime(df['timestamp'], format='%Y-%m-%d %H:%M:%S.%f', errors='coerce') # 筛选出NaT的行,用整秒格式重新解析 na_mask = df['timestamp'].isna() df.loc[na_mask, 'timestamp'] = pd.to_datetime(df.loc[na_mask, 'timestamp'], format='%Y-%m-%d %H:%M:%S')这种方法通过向量操作批量处理,性能远高于自定义Python函数。
方法3:自动推断格式(最简写法)
利用Pandas的infer_datetime_format=True参数,让系统自动识别时间格式,对于这种仅差亚秒后缀的混合格式,推断准确率很高:import pandas as pd df = pd.read_csv('your_dataset.csv', parse_dates=['timestamp'], infer_datetime_format=True)该方法无需手动指定格式,Pandas会先分析前几行的格式特征,然后批量转换,性能优于自定义函数,适合快速处理场景。
内容的提问来源于stack exchange,提问作者Sebastian Scholz
相关产品推荐
相关产品推荐

