我收到一个值错误,说我的数据与格式不匹配。不知道这是一个错误还是我在这里丢失了一些东西。我指的是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")
答案 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]