Python 解析熊猫的蜜枣

Python 解析熊猫的蜜枣,python,datetime,pandas,Python,Datetime,Pandas,以下代码无法将“我的日期”列解析为csv文件中的日期 data=pd.read_csv('c:/data.csv',parse_dates=True,keep_date_col = True) 或 数据如下 date value 30MAR1990 140000 30JUN1990 30000 30SEP1990 120000 30DEC1990 34555 我做错了什么?请帮忙 谢谢。您可以使用日期解析器参数读取csv In [62]

以下代码无法将“我的日期”列解析为csv文件中的日期

data=pd.read_csv('c:/data.csv',parse_dates=True,keep_date_col = True) 

数据如下

date          value 
30MAR1990    140000 
30JUN1990    30000  
30SEP1990    120000  
30DEC1990    34555
我做错了什么?请帮忙


谢谢。

您可以使用
日期解析器
参数读取csv

In [62]: from pandas.compat import StringIO

In [63]: s = """date,value 
30MAR1990,140000 
30JUN1990,30000  
30SEP1990,120000  
30DEC1990,34555
"""

In [64]: from pandas.compat import StringIO

In [65]: import datetime
date\u解析器
需要在字符串数组上调用的函数
func
对每个字符串调用
datetime.datetime.strtime
。查看python文档中的
datetime
模块,了解有关格式代码的更多信息

In [66]: func = lambda dates: [datetime.datetime.strptime(x, '%d%b%Y') for x in dates]

In [67]: s = """date,value 
30MAR1990,140000 
30JUN1990,30000  
30SEP1990,120000  
30DEC1990,34555
"""

In [68]: pd.read_csv(StringIO(s), parse_dates=['date'], date_parser=func)
Out[68]: 
        date  value 
0 1990-03-30  140000
1 1990-06-30   30000
2 1990-09-30  120000
3 1990-12-30   34555

[4 rows x 2 columns]

这是一种非标准格式,因此没有被默认解析器捕获,您可以传递自己的:

In [11]: import datetime as dt

In [12]: dt.datetime.strptime('30MAR1990', '%d%b%Y')
Out[12]: datetime.datetime(1990, 3, 30, 0, 0)

In [13]: parser = lambda date: pd.datetime.strptime(date, '%d%b%Y')

In [14]: pd.read_csv(StringIO(s), parse_dates=[0], date_parser=parser)
Out[14]:
        date  value
0 1990-03-30  140000
1 1990-06-30   30000
2 1990-09-30  120000
3 1990-12-30   34555
另一个选项是在读入字符串后使用to_datetime:

df['date'] = pd.to_datetime(df['date'], format='%d%b%Y')

data=pd.read\u csv('c:/data.csv',parse\u dates=True,index\u col='Date')

谢谢,它可以工作。我刚刚发现,对于一个大文件来说,解析日期确实很耗时。@user3576212是的,您正在从csv的快速Cython读取转移到python的日期时间。在imo中使用to_datetime更好。谢谢你的回答,但是将True写成[0]很糟糕。@Hakaishin不是这样,这是要解析的日期的列索引熊猫在哪里记录它认为的标准格式?嗨。欢迎来到SO。答案应包括对代码的解释。
df['date'] = pd.to_datetime(df['date'], format='%d%b%Y')