Pandas读取CSV解析datetime列因缺毫秒报错及导出规范咨询
问题1:兼容两种日期格式完成解析
你遇到的报错有两个原因:一是自定义lambda只能处理单条字符串,旧版本pandas的date_parser会把整列作为numpy数组传入导致类型不匹配;二是指定的解析格式无法匹配缺失毫秒的日期值。可以用以下两种方案解决:
方案1:自定义兼容解析函数(全版本兼容)
from datetime import datetime import pandas as pd def custom_date_parser(time_str): try: # 优先匹配带毫秒的格式 return datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S.%f') except ValueError: # 匹配失败时尝试无毫秒格式,自动补0毫秒 return datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S') # 先读文件再转日期,避免数组传入的类型问题 df = pd.read_csv('abc.csv') df['endTime'] = df['endTime'].apply(custom_date_parser)
方案2:用pandas内置多格式匹配(pandas 1.4.0+)
更高版本的pandas支持直接传入多个格式列表自动匹配,代码更简洁:
df = pd.read_csv( 'abc.csv', parse_dates=['endTime'], date_format=['%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M:%S'] )
问题2:导出CSV时统一携带毫秒
导出时在to_csv方法中指定带毫秒的日期格式即可,即使原日期毫秒为0也会自动补全:
# 如需和示例一致保留3位毫秒,格式替换为'%Y-%m-%d %H:%M:%S.%3f'即可 df.to_csv( 'export_abc.csv', date_format='%Y-%m-%d %H:%M:%S.%f', index=False )
内容的提问来源于stack exchange,提问作者user1769197
相关产品推荐
相关产品推荐

