【发布时间】:2021-05-09 15:54:11
【问题描述】:
我正在编写一个脚本,该脚本使用 pandas 读取 .csv 文件并填写特定表格。 .csv 文件中的一列是生日列。
在读取 .csv 文件时,我使用 'parse_dates' 对其进行解析以获取日期时间对象,以便我可以根据需要对其进行格式化:
df = pd.read_csv('readfile1.csv',sep=';', parse_dates=['birthday'])
虽然它与 readfile1.csv 完美配合,但它不适用于 readfile2.csv。但是这些文件看起来完全一样。
我得到的错误让我认为通过 pandas 自动解析日期时间不起作用:
print(df.at[i,'birthday'].strftime("%d%m%Y"))
AttributeError: 'str' object has no attribute 'strftime'
在这两种情况下,生日的格式如下:
'1965-05-16T12:00:00.000Z' #from readfile1.csv
'1934-04-06T11:00:00.000Z' #from readfile2.csv
我不知道出了什么问题。我检查了文件的编码,两者都是“UTF-8”。有什么想法吗?
谢谢! 问候
【问题讨论】:
-
带有 df.info(),你会得到什么类型的列生日?
-
Dtype 是 readfile2 的“对象”。 readfile1: datetime64[ns, UTC]
-
如果不设置关键字
parse_dates,读取csv后转换列,用pd.to_datetime和关键字errors='coerce',会得到什么结果?该列是否有NaT值? -
我就是这么做的。问题是日期错误。 1077-11-19T12:00:00.000Z 导致:
File "pandas\_libs\tslibs\np_datetime.pyx", line 113, in pandas._libs.tslibs.np_datetime.check_dts_bounds pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1077-11-19 12:00:00 -
太棒了 :) 如果您有多个错误的时间戳,我描述的方法也会很有帮助,因为您可以轻松找到所有单元格(字符串 col,其中 datetime col 是
NaT)。
标签: python pandas string csv datetime