熊猫用字符串转换日期

时间:2017-04-20 16:51:11

标签: python csv pandas datetime numpy

我从python和pandas以及matplotlib开始。我正在使用超过百万条目的数据。我正在尝试更改日期格式。在CSV文件中,日期格式为23-JUN-11。我希望将来使用日期来计算每位候选人的捐款金额。如何将日期格式转换为pandas的可读格式?

Here is the link to cut file 149 entries

我的代码:

%matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

第一位候选人

reader_bachmann = pd.read_csv('P00000001-ALL.csv' ,converters={'cand_id': lambda x: str(x)[1:]},parse_dates=True, squeeze=True, low_memory=False, nrows=411 )

date_frame = pd.DataFrame(reader_bachmann, columns = ['contb_receipt_dt'])

数据切片

  s = date_frame.iloc[:,0]
    date_slice = pd.Series([s])
    date_strip = date_slice.str.replace('JUN','6') 

尝试转换为新的日期格式

 date = pd.to_datetime(s, format='%d%b%Y')
    print(date_slice)

以下是错误消息

ValueError: could not convert string to float: '05-JUL-11'

2 个答案:

答案 0 :(得分:6)

您需要使用其他日期格式字符串:

format='%d-%b-%y'

<强>为什么吗

错误消息提供了有关错误的线索:

  

ValueError:无法将字符串转换为float:&#39; 05-JUL-11&#39;

format string控制着转化,目前是:

format='%d%b%Y'

所需的字段是:

%y - year without a century (range 00 to 99)
%b - abbreviated month name
%d - day of the month (01 to 31)

缺少的是-分隔数据字符串中的字段,y分隔两位数年份而不是当前Y四位数年份。

答案 1 :(得分:2)

作为替代方案,您可以使用 dateutil.parser 直接解析包含字符串的日期,我已经为demo创建了一个随机数据框。

l = [] 
for i in range(100):
    l.append('23-JUN-11') 
B = pd.DataFrame({'Date':l})

现在,让我们导入 dateutil.parser 并将其应用于我们的日期列

import dateutil.parser
B['Date2'] = B['Date'].apply(lambda x : dateutil.parser.parse(x))
B.head()
Out[106]: 
    Date      Date2
0  23-JUN-11 2011-06-23
1  23-JUN-11 2011-06-23
2  23-JUN-11 2011-06-23
3  23-JUN-11 2011-06-23
4  23-JUN-11 2011-06-23