我从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'
答案 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