单一行DataFrame执行pd.to_datetime报错问题咨询
单行DataFrame转日期列报错?原因和解决方案都在这了
为啥单行就报错,多行没事?
其实核心问题出在pandas对空列的类型推断上:
- 当你的DataFrame只有一行时,
END_DATE列里的空值会被pandas默认识别成float类型的NaN(因为单列单行空值的默认 dtype 是float64)。而pd.to_datetime在处理单个float类型的NaN时,就会抛出你看到的这个错误。 - 但如果是多行DataFrame,哪怕有多个空值,pandas会把列的 dtype 推断为object,这时候
pd.to_datetime能正常把空值转换成时间类型的空值NaT,自然就不会报错了。
几种快速解决的办法
这里给你整理了几个靠谱的方案,随便挑一个都能解决:
给
pd.to_datetime加errors='coerce'参数
这个参数的作用就是强制把转不了的值变成NaT,不管列原来是什么类型:df.loc[:, 'START_DATE'] = pd.to_datetime(df['START_DATE'], errors='coerce') df.loc[:, 'END_DATE'] = pd.to_datetime(df['END_DATE'], errors='coerce')先把列转成object类型再处理
手动把空列的类型改成object,模拟多行时的状态,再转日期:df['END_DATE'] = df['END_DATE'].astype(object) df.loc[:, 'END_DATE'] = pd.to_datetime(df['END_DATE'])批量处理所有日期列
用apply一次性处理所有需要转日期的列,能避免逐列处理时的类型问题:date_columns = ['START_DATE', 'END_DATE'] df[date_columns] = df[date_columns].apply(pd.to_datetime, errors='coerce')读取数据时直接指定日期列
如果你的DataFrame是从文件读进来的,那在读的时候就直接指定要解析成日期的列,从根源上避免这个问题:# 拿read_csv举例子,其他读取方法类似 df = pd.read_csv('your_data.csv', parse_dates=['START_DATE', 'END_DATE'])
内容的提问来源于stack exchange,提问作者neo
相关产品推荐
相关产品推荐

