熊猫用字符串转换日期

Posted

技术标签:

【中文标题】熊猫用字符串转换日期【英文标题】:Pandas converting date with string in 【发布时间】:2017-09-17 10:30:54 【问题描述】:

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

【问题讨论】:

请显示一个日期的例子 - 因为它在 csv 中 @GiantsLoveDeathMetal 列名是 contb_receipt_dt,日期格式是 6/20/2011 但是当我打印数组时,熊猫将其视为日期格式 23-JUN-11 能否请您发布 CSV 的 sn-p,151MB 有点大。仅仅一百行就足以解决这个问题,是吗? @JimFactor 我发布了一个新链接,其中包含文件 149 条目的较小版本。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

您需要使用不同的日期格式字符串:

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

为什么?

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

ValueError:无法将字符串转换为浮点数:'05-JUL-11'

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

【讨论】:

以上是关于熊猫用字符串转换日期的主要内容,如果未能解决你的问题,请参考以下文章

将字符串日期时间转换为熊猫日期时间

如何在熊猫中将字符串日期转换为数字[重复]

将列字符串转换/解析为日期时间值 - 熊猫

将纪元时间转换为熊猫数据框中的格式化日期字符串

熊猫:将 dtype 'object' 转换为 int

日期时间字符串到纪元:熊猫数据框