Pandas如何自动推断自定义%d.%m.%Y格式的日期类型列
问题原因
date_parser只负责提供日期解析的执行逻辑,本身不会触发pandas的自动日期列检测。pd.read_csv的parse_dates参数默认值为False,这种状态下pandas不会对任何列做日期类型推断,你传入的自定义解析器压根不会被调用,自然没法自动完成日期转换。
你之前手动指定日期列名时解析能生效,本质是给parse_dates传入了明确的列列表,告诉pandas哪些列需要做日期处理,自定义解析器才会真正执行。
解决方案
要实现自动识别日期列的效果,只需要把parse_dates参数设为True即可。开启后pandas会自动扫描所有列,对符合日期格式的列调用你传入的解析器完成转换,不需要手动写死列名,完全适配数据源字段变动的场景:
from datetime import datetime import pandas as pd data = pd.read_csv( p, skiprows=[0,1,2,4], keep_default_na=False, parse_dates=True, date_parser=lambda x: datetime.strptime(x, "%d.%m.%Y").date(), sep="\t" )
如果用的是2.0及以上版本的pandas,date_parser参数已经被标记为弃用,更推荐直接用date_format参数指定日期格式,解析性能比传lambda函数高很多,写法也更简洁:
import pandas as pd data = pd.read_csv( p, skiprows=[0,1,2,4], keep_default_na=False, parse_dates=True, date_format="%d.%m.%Y", sep="\t" )
自动识别逻辑说明:只有某一列的所有非空值都能匹配指定的日期格式时,pandas才会将该列转换为日期类型,不会误转其他普通字符串/数字列。
内容的提问来源于stack exchange,提问作者Spok
相关产品推荐
相关产品推荐

