datetime dtypes in pandas read_csv



我正在使用带有多个DateTime列的CSV文件中阅读。我需要在文件中阅读时设置数据类型,但是数据似乎是一个问题。例如:

headers = ['col1', 'col2', 'col3', 'col4']
dtypes = ['datetime', 'datetime', 'str', 'float']
pd.read_csv(file, sep='t', header=None, names=headers, dtype=dtypes)

当运行给出错误时:

typeError:数据类型" dateTime"不了解

事实之后,通过pandas.to_datetime()转换列不是我不知道哪些列是dateTime对象的选项。这些信息可能会改变,并来自任何信息列表。

另外,我尝试将CSV文件加载到numpy.genfromtxt上,在该功能中设置dtypes,然后将其转换为pandas.dataframe,但它却赚了数据。任何帮助都非常感谢!

为什么它不起作用

没有为read_csv设置的dateTime dtype,因为CSV文件只能包含字符串,整数和浮点。

将DTYPE设置为DateTime将使Pandas将DateTime解释为一个对象,这意味着您最终会带有一个字符串。

熊猫解决此

的方式

pandas.read_csv()函数具有一个关键字参数,称为parse_dates

使用此功能,您可以使用默认的date_parserdateutil.parser.parser

在Fly转换字符串,浮点或整数中纳入数据。
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = {'col1': 'str', 'col2': 'str', 'col3': 'str', 'col4': 'float'}
parse_dates = ['col1', 'col2']
pd.read_csv(file, sep='t', header=None, names=headers, dtype=dtypes, parse_dates=parse_dates)

这会导致大熊猫读取col1col2作为字符串,它们很可能是(" 2016-05-05"等),在读取字符串后,每列的date_parser都会在该字符串上行动并给出返回该功能的返回。

定义自己的日期解析功能:

pandas.read_csv()函数也有一个关键字参数,称为date_parser

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

gotcha警告

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

date_parser = pd.datetools.to_datetime

这是不正确

date_parser = pd.datetools.to_datetime()

pandas 0.22更新

pd.datetools.to_datetime已重新安置到date_parser = pd.to_datetime

谢谢@stackoveryc

read_csv有一个parse_dates参数,该参数允许您定义要视为日期或数据的列的名称:

date_cols = ['col1', 'col2']
pd.read_csv(file, sep='t', header=None, names=headers, parse_dates=date_cols)

您可以尝试传递实际类型而不是字符串。

import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4'] 
dtypes = [datetime, datetime, str, float] 
pd.read_csv(file, sep='t', header=None, names=headers, dtype=dtypes)

但是,在没有任何数据的情况下,很难诊断出来。

实际上,您可能希望大熊猫将日期解析为时间戳,因此可能是:

pd.read_csv(file, sep='t', header=None, names=headers, parse_dates=True)

我使用了以下代码,并且有效:

headers = ['col1', 'col2', 'col3', 'col4']
df=pd.read_csv(file, sep='t', header=None, names=headers, parse_dates=['col1', 'col2'])

我的解决方法是加载其默认类型,然后使用pandas.to_datetime()函数一行。

df[target_col] = pd.to_datetime(df[target_col])

我尝试使用dtypes = [dateTime,...]选项,但是

import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4'] 
dtypes = [datetime, datetime, str, float] 
pd.read_csv(file, sep='t', header=None, names=headers, dtype=dtypes)

我遇到以下错误:

TypeError: data type not understood

我唯一要做的更改是用dateTime.dateTime

替换日期时间
import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4'] 
dtypes = [datetime.datetime, datetime.datetime, str, float] 
pd.read_csv(file, sep='t', header=None, names=headers, dtype=dtypes)