- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
pandas.read_csv()推断列的类型,但我无法让它推断出任何日期时间或时间增量类型(例如 datetime64
、timedelta64
),因为这些列的值看起来像是明显的日期时间和时间增量。
这是一个示例 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/
基础问题 我要解决的基本问题是: 我有一个模板参数包 ArgTypes,我需要用包装在 std::optional 中的每个类型创建一个元组。例如:make_optional_tuple应该返回 st
我使用 createEntityAdapter 设置了一个简单的 redux store。初始状态包含实体、ID、状态、错误设置等 const carouselEventAdapter = creat
我有一些(遗留)代码,如下所示: void castFoo(string type, void* foo) { FooA* foo_a = NULL; FooB* foo_b = NULL;
我的代码是 const int *const ptrA = nullptr; auto *ptrB = &ptrA; 我对 const int *const ptrA 的看法是: (*
我目前正在尝试用 C++ 实现 XOR 链表。我尝试使用模板使其通用。编译时会弹出此错误,我无法解决这个问题。 我尝试使用模板在谷歌上搜索 XOR 链表,但到目前为止似乎还没有实现它。 异或链表.h:
我正在尝试找到一种方法来调用多个类成员函数,每个函数都有不同的参数,并且在调用前后会发生某些已知功能。 这个包装函数是我试过的,但是例如对它的最终调用不会编译错误: 'bool Wrapper(Wor
此代码在 上编译成功g++ ( Coliru ) ,但不是 Visual C++ ( rextester ) - 在线和我的桌面。 它是一个更大的 Visual Studio 2015 项目的简化版本
我正在尝试编写一个通用类,它传递一个键 key 对应于一组已知接口(interface)中的一个的键,稍后可以传递一个对象 thing 并类型安全地访问 thing[key]。这是我得到的: inte
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!