您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何让pandas.read_csv()从CSV文件列中推断出datetime和timedelta类型?

5b51 2022/1/14 8:20:18 python 字数 4437 阅读 494 来源 www.jb51.cc/python

pandas.read_csv()推断列的类型,但我不能让它推断出任何日期时间或timedelta类型(例如datetime64,timedelta64),其值似乎是明显的日期时间和时间增量. 这是一个示例CSV文件: datetime,timedelta,integer,number,boolean,string 20111230 00:00:00,one hour,10,1.6,True,Fo

概述

这是一个示例CSV文件

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类型?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶