gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:11:10 33 4
gpt4 key购买 nike

pandas.read_csv()推断列的类型,但我无法让它推断出任何日期时间或时间增量类型(例如 datetime64timedelta64),因为这些列的值看起来像是明显的日期时间和时间增量。

这是一个示例 CSV 文件:

datetime,timedelta,integer,number,boolean,string
20111230 00:00:00,one hour,10,1.6,True,Foobar

还有一些用 pandas 读取它的代码:

dataframe = pandas.read_csv(path)

该数据框上的列类型显示为对象、对象、整数、 float 、 bool 值、对象。除了前两列,它们都符合我的预期,我想将它们设为 datetime 和 timedelta。

是否可以让 pandas 自动检测 datetime 和 timedelta 列?

(我不想告诉 pandas 哪些列是 datetimes 和 timedeltas 或告诉它格式,我希望它尝试自动检测它们,就像它对 into、float 和 bool 列所做的那样。)

最佳答案

您可以做的一件事是使用 strptime 定义您的日期解析器,这将处理您的日期格式,但这不是自动的:

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(尽管在 0.13.1 及更高版本中):

df = pd.read_csv(r'c:\temp1.txt', parse_dates=[0], infer_datetime_format=True)

关于python - 如何让 pandas.read_csv() 从 CSV 文件列中推断出 datetime 和 timedelta 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21906715/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com