我有一个带有此列的数据框:
Mi_Meteo['Time_Instant'].head():
0 2013/11/14 17:00
1 2013/11/14 18:00
2 2013/11/14 19:00
3 2013/11/14 20:00
4 2013/11/14 21:00
Name: Time_Instant, dtype: object
做完检查后,我才意识到:
Mi_Meteo['Time_Instant'].value_counts():
2013/12/09 02:00 33
2013/12/01 22:00 33
2013/12/11 10:00 33
2013/12/05 09:00 33
.
.
.
.
2013/11/16 02:00 21
2013/11/07 10:00 11
2013/11/17 22:00 11
DateTIme 3
所以我将其剥离:
Mi_Meteo['Time_Instant'] = Mi_Meteo['Time_Instant'].str.rstrip('DateTIme')# Cause Otherwise I would get this Error When Converting : 'Unknown string format'
然后我尝试将其转换:
Mi_Meteo['Time_Instant'] = pd.to_datetime(Mi_Meteo['Time_Instant'])
但是我得到这个错误:
String does not contain a date.
任何建议都会受到赞赏,谢谢大家。
答案 0 :(得分:1)
有点晚了,为什么不使用这个:
Mi_Meteo['Time_Instant'] = pd.to_datetime(Mi_Meteo['Time_Instant'], errors='coerce')
在pandas.to_datetime文档中,“错误”参数的描述:
错误{'忽略','提高','胁迫'},默认'提高'如果是'提高',则 无效的解析将引发异常。
如果为“强制”,则将无效解析设置为NaT。
如果为“忽略”,则无效的解析将返回输入。
答案 1 :(得分:0)
我在重现您的错误时遇到问题,因此无法确定这是否可以解决您遇到的问题。如果没有,请尝试提供最少的代码/数据样本,以重现您的错误。
这是我试图重现您的情况的
lzt = ['2013/11/16 02:00 ',
'2013/11/07 10:00 ',
'2013/11/17 22:00 ',
'DateTIme',
'DateTIme',
'DateTIme']
ser = pd.Series(lzt)
ser = ser.str.rstrip('DateTIme')
ser = pd.to_datetime(ser)
但是,正如我所说的,我没有出现任何错误,因此我们的熊猫版本不同,或者您的数据还有其他问题。使用rstrip保留一些空白的字符串数据:
0 2013/11/16 02:00
1 2013/11/07 10:00
2 2013/11/17 22:00
3
4
5
当我在其上运行pd.to_datetime时,它为我提供了NaT(不是时间):
Out[34]:
0 2013-11-16 02:00:00
1 2013-11-07 10:00:00
2 2013-11-17 22:00:00
3 NaT
4 NaT
5 NaT
dtype: datetime64[ns]
我想说最好是一起删除不需要的行:
ser = ser[ser != 'DateTIme']
Out[39]:
0 2013-11-16 02:00:00
1 2013-11-07 10:00:00
2 2013-11-17 22:00:00
dtype: datetime64[ns]
查看是否可行,否则请提供足够的信息以重现该错误。
答案 2 :(得分:0)
我遇到了同样的错误-原来我的两个日期是空的:“”。
要查找有问题的日期的行索引,我使用了以下列表理解:
badRows = [n for n,x in enumerate(df['DATE'].tolist()) if x.strip() in ['']]
这返回了一个列表,其中包含导致问题的“ DATE”列中的行的索引:
[745672, 745673]
然后可以就地删除这些行:
df.drop(df.index[badRows],inplace=True)
答案 3 :(得分:0)
对此有两种可能的解决方案:
您可以使用coerce
的{{1}}参数中的errors
来使错误消失,如下所示:pd.to_datetime()
或者,如果您想知道哪些日期具有不可解析的值,则可以通过一次如下转换每个值来进行搜索。不管错误值的类型或格式如何,它们都可以工作:
Mi_Meteo['Time_Instant'] = pd.to_datetime(Mi_Meteo['Time_Instant'], errors='coerce')
在dates = []
wrong_dates = []
for i in Mi_Meteo['Time_Instant'],unique():
try:
date = pd.to_datetime(i)
dates.append(i)
except:
wrong_dates.append(i)
列表中,您将拥有所有错误的值,而在wrong_dates
中,您将拥有所有正确的值