pandas 阅读日期从csv以yy-mm-dd格式 [英] pandas reading dates from csv in yy-mm-dd format

查看:499
本文介绍了 pandas 阅读日期从csv以yy-mm-dd格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个csv文件,日期格式显示为dd-mmm-yy,我想以yyyy-mm-dd格式读取。 parse dates选项可以工作,但它不能在2000之前转换日期正确
示例:actual date is 01-Aug-1968。显示为01-Aug-68。 Pandas日期parase和更正= true将日期读取为01-Aug-2068。



是否有任何选项以正确的格式读取日期2000。

解决方案

  from dateutil.relativedelta import relativedelta 
import datetime

让我们假设你有这样的csv:

  mydates 
18-Aug-68
13-Jul-45
12-Sep-00
20-Jun-10
15-Jul-60

定义日期格式

  d = lambda x:pd.datetime.strptime(x,'%d-%b-%y')
pre>

对它们设置约束

  dateparse = lambda x: d(x)如果d(x) datetime.datetime.now()else d(x) -  relativedelta(years = 100)

csv:

  df = pd.read_csv(myfile.csv,parse_dates = ['mydates'],date_parser = dateparse) 

这里是您的结果:

  print df 

mydates
0 1968-08-18
1 1945-07-13
2 2000-09-12
3 2010-06-20
4 1960-07-15

Voilà


I have a csv files with dates in the format displayed as dd-mmm-yy and i want to read in the format yyyy-mm-dd. parse dates option works but it not converting dates correct before 2000 Example: actual date is 01-Aug-1968. It is displayed as 01-Aug-68. Pandas date parase and correction=true reads the date as 01-Aug-2068.

Is there any option to read the date in pandas in the correct format for the dates before 2000.

解决方案

from dateutil.relativedelta import relativedelta
import datetime

let's assume you have a csv like this:

mydates
18-Aug-68
13-Jul-45
12-Sep-00
20-Jun-10
15-Jul-60

Define your date format

d = lambda x: pd.datetime.strptime(x, '%d-%b-%y')

Put a constraint on them

dateparse = lambda x: d(x) if d(x) < datetime.datetime.now() else d(x) - relativedelta(years=100) 

read your csv:

df = pd.read_csv("myfile.csv", parse_dates=['mydates'], date_parser=dateparse)

here is your result:

print df

     mydates
0 1968-08-18
1 1945-07-13
2 2000-09-12
3 2010-06-20
4 1960-07-15

Voilà

这篇关于 pandas 阅读日期从csv以yy-mm-dd格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆