熊猫-字符串与格式不匹配时,“时间数据与格式不匹配”​​错误?

时间:2018-11-01 12:51:33

标签: python pandas date datetime

我收到一个值错误,说我的数据与格式不匹配。不知道这是一个错误还是我在这里丢失了一些东西。我指的是this documentation的字符串格式。怪异的部分是,如果我将“数据”数据帧写入csv并读入,然后调用下面的函数将转换日期,所以我不确定为什么不写入csv就无法正常工作。

有什么想法吗?

data['Date'] = pd.to_datetime(data['Date'], format='%d-%b-%Y')  

我遇到两个错误

 TypeError: Unrecognized value type: <class 'str'>  

 ValueError: time data '27‑Aug‑2018' does not match format '%d-%b-%Y' (match) 

示例日期-

2‑Jul‑2018     
27‑Aug‑2018    
28‑May‑2018    
19‑Jun‑2017    
5‑Mar‑2018     
15‑Jan‑2018    
11‑Nov‑2013    
23‑Nov‑2015    
23‑Jun‑2014    
18‑Jun‑2018    
30‑Apr‑2018    
14‑May‑2018    
16‑Apr‑2018    
26‑Feb‑2018    
19‑Mar‑2018    
29‑Jun‑2015   

是不是因为它们都不都是两位数的日子?一位数字天的字符串格式值是多少?看起来这可能是原因,但是我不确定为什么它会在'27'上出错。

最终解决方案(它是unicode而不是字符串)-

data['Date'] = data['Date'].apply(unidecode.unidecode)  
data['Date'] = data['Date'].apply(lambda x: x.replace("-", "/"))    
data['Date'] = pd.to_datetime(data['Date'], format="%d/%b/%Y")

2 个答案:

答案 0 :(得分:2)

您的日期字符串似乎有问题。我用示例数据复制了您的问题,如果我删除了连字符并手动替换了它们(对于前三个日期),则代码有效

while (scanf("%d*[^\n]", &height[i++]) == 1 && i < height_len);

输出:

pd.to_datetime(df1['Date'] ,errors ='coerce')

最重要的是:您的连字符看起来像普通的连字符,但实际上又是别的东西,只需清理源数据,您就可以使用

答案 1 :(得分:1)

您在这里有一个特殊标记-

df.iloc[0,0][2]
Out[287]: '‑'

将其替换为'-'

pd.to_datetime(df.iloc[:,0].str.replace('‑','-'),format='%d-%b-%Y')
Out[288]: 
0    2018-08-27
1    2018-05-28
2    2017-06-19
3    2018-03-05
4    2018-01-15
5    2013-11-11
6    2015-11-23
7    2014-06-23
8    2018-06-18
9    2018-04-30
10   2018-05-14
11   2018-04-16
12   2018-02-26
13   2018-03-19
14   2015-06-29
Name: 2‑Jul‑2018, dtype: datetime64[ns]