我正在读取一个具有多个日期时间列的csv文件。我需要在读取文件时设置数据类型,但日期时间似乎是一个问题。例如:

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

当run给出错误时:

数据类型“datetime”不理解

转换列后,通过pandas.to_datetime()不是一个选项,我不知道哪些列将是datetime对象。该信息可以更改,并且来自通知dtypes列表的任何信息。

或者,我尝试用numpy加载csv文件。Genfromtxt,在该函数中设置dtypes,然后转换为pandas。Dataframe但它混淆了数据。任何帮助都非常感谢!


当前回答

我尝试使用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替换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)

其他回答

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

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)

但如果没有任何数据可以修补,就很难诊断出这种情况。

实际上,你可能希望pandas将日期解析为时间戳,所以可能是:

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'])

read_csv有一个parse_dates参数,它允许你定义你想要作为日期或日期时间处理的列的名称:

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

我的解决方法是将其加载为默认类型,然后向下一行使用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替换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)