pandas read\u csv中的日期时间数据类型

我正在读取一个包含多个datetime列的csv文件。我需要在读取文件时设置数据类型,但datetimes似乎是个问题。例如:

标题=['col1'、'col2'、'col3'、'col4']
数据类型=['datetime','datetime','str','float']
pd.read\u csv(文件,sep='\t',header=None,names=headers,dtype=dtypes)

运行时出现错误:

TypeError:无法理解数据类型“datetime”

通过pandas.to_datetime()转换列不是一个选项,我不知道哪些列将成为datetime对象。这些信息可以更改,并且来自于通知我的数据类型列表的任何信息

或者,我尝试使用numpy.genfromtxt加载csv文件,在该函数中设置数据类型,然后将其转换为pandas.dataframe,但它会弄乱数据。非常感谢您的帮助

为什么它不起作用

由于csv文件只能包含字符串、整数和浮点数,因此无法为read_csv设置日期时间数据类型

将数据类型设置为datetime将使pandas将datetime解释为对象,这意味着您将得到一个字符串

如何解决这个问题

pandas.read\u csv()函数有一个名为parse\u dates

使用此功能,您可以使用默认的date\u解析器dateutil.parser.parser)动态地将字符串、浮点或整数转换为datetime

标题=['col1'、'col2'、'col3'、'col4']
数据类型={'col1':'str','col2':'str','col3':'str','col4':'float'}
parse_dates=['col1','col2']
pd.read\u csv(文件,sep='\t',header=None,name=headers,dtype=dtypes,parse\u dates=parse\u dates)

这将导致panda将col1col2作为字符串读取,它们很可能是(“2016-05-05”等),读取字符串后,每列的日期解析器将对该字符串进行处理,并返回函数返回的任何内容

定义自己的日期解析函数:

pandas.read\u csv()函数也有一个名为date\u解析器的关键字参数

将此设置为lambda函数将使该特定函数用于解析日期

明白了,警告

您必须给它函数,而不是函数的执行,因此这是正确的

date\u parser=pd.datetools.to\u datetime

这是不正确的:

date\u parser=pd.datetools.to\u datetime()

熊猫0.22更新

pd.datetools.to\u datetime已重新定位到date\u parser=pd.to\u datetime

谢谢@stackoverYC

发表评论