概述
datetime,timedelta,integer,number,boolean,string 20111230 00:00:00,one hour,10,1.6,True,Foobar
还有一些用pandas读取它的代码:
dataframe = pandas.read_csv(path)
该数据框上的列类型分别为object,object,int,float,bool,object.除了前两列之外,它们都是我所期望的,我希望它们是datetime和timedelta.
是否有可能让pandas自动检测datetime和timedelta列?
(我不想告诉大熊猫哪些列是datetimes和timedeltas或告诉它格式,我希望它尝试自动检测它们,就像它对into,float和bool列一样.)
In [59]: import pandas as pd import datetime as dt def parse_dates(x): return dt.datetime.strptime(x,'%Y%m%d %H:%M:%s') # dict for word lookup,conversion word_to_int={'zero':0,'one':1,'two':2,'three':3,'four':4,'five':5,'six':6,'seven':7,'eight':8,'nine':9} def str_to_time_delta(x): num = 0 if 'hour' in x.lower(): num = x[0:x.find(' ')].lower() return dt.timedelta( hours = word_to_int[num]) df = pd.read_csv(r'c:\temp1.txt',parse_dates=[0],date_parser=parse_dates) df.dtypes Out[59]: datetime datetime64[ns] timedelta object integer int64 number float64 boolean bool string object dtype: object In [60]:
然后转换为timedeltas使用dict和函数来解析并转换为timedeltas
df['timedelta'] = df['timedelta'].map(str_to_time_delta) In [61]: df.dtypes Out[61]: datetime datetime64[ns] timedelta timedelta64[ns] integer int64 number float64 boolean bool string object dtype: object In [62]: df Out[62]: datetime timedelta integer number boolean string 0 2011-12-30 00:00:00 01:00:00 10 1.6 True Foobar [1 rows x 6 columns]
要回答您的主要问题,我不知道如何自动执行此操作.
编辑
而不是我复杂的映射功能,你可以这样做:
df['timedelta'] = pd.to_timedelta(df['timedelta'])
进一步编辑
正如@Jeff所述,你可以在阅读csv时使用strptime而不是使用strptime(虽然版本在0.13.1及更高版本中):
df = pd.read_csv(r'c:\temp1.txt',infer_datetime_format=True)
总结
以上是编程之家为你收集整理的如何让pandas.read_csv()从CSV文件列中推断出datetime和timedelta类型?全部内容,希望文章能够帮你解决如何让pandas.read_csv()从CSV文件列中推断出datetime和timedelta类型?所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧