[英]Try Except block not working with datetime object?
我有一個DataFrame,其中一列包含一些日期時間數據,而其他列則包含其他內容。 但是,有些數據被弄亂了,例如:
11/11/2014 22:28 15.1
11/11/2014 22:29 16.1
11/11/2014 22:30 15.2
bollocks 10000
11/11/2014 22:32 15.4
:00
11/11/2014 22:34 15.3
我想擺脫混亂的局面。 現在,我決定只將它們替換為NaN值(但是刪除它們也將有所幫助,只是它在循環中不起作用,所以這不是問題,在下一步中,我可以只使用dropna()
)。 我正在使用try()
來執行此操作,但是異常無法正常工作。 我的代碼如下所示:
for line in df.ix[:,"DATETIME"]:
try:
line = datetime.datetime.strptime(line,"%d/%m/%Y %H:%M")
except ValueError:
line = 'NaN'
except TypeError:
line = 'NaN'
但是最后,我仍然收到ValueError: time data '156004E00F455AA' does not match format '%d/%m/%Y %H:%M'
,並且故障行未替換為NaN
。 怎么了 (我還嘗試將錯誤放在這樣的一行上: except (ValueError, TypeError):
也不起作用...)
將列轉換為日期時間時, pd.to_datetime
可以設置為NaT
格式錯誤的數據。
pd.to_datetime(df['DATETIME'], format = '%d/%m/%Y %H:%M', errors='coerce')
DATETIME
0 11/11/2014 22:28
1 11/11/2014 22:29
2 11/11/2014 22:30
3 NaT
4 11/11/2014 22:32
5 NaT
6 11/11/2014 22:34
這不能嚴格回答您的查詢,但是如果您確定所有有效的日期時間字符串都將采用以下格式: "%d/%m/%Y %H:%M"
,則可以執行以下操作:
In [34]: df
Out[34]:
DATETIME VALUES
0 11/11/2014 22:28 15.1
1 11/11/2014 22:29 16.1
2 11/11/2014 22:30 15.2
3 bollocks 10000.0
4 11/11/2014 22:32 15.4
5 :00 NaN
6 11/11/2014 22:34 15.3
In [35]: df = df.replace(r'^(?!\d{2}/\d{2}/\d{4} \d{2}:\d{2}).*', np.nan, regex=True)
In [36]: df
Out[36]:
DATETIME VALUES
0 11/11/2014 22:28 15.1
1 11/11/2014 22:29 16.1
2 11/11/2014 22:30 15.2
3 NaN 10000.0
4 11/11/2014 22:32 15.4
5 NaN NaN
6 11/11/2014 22:34 15.3
In [37]: df['DATETIME'].apply(lambda x: pd.to_datetime(x, format="%d/%m/%Y %H:%M"))
Out[37]:
0 2014-11-11 22:28:00
1 2014-11-11 22:29:00
2 2014-11-11 22:30:00
3 NaT
4 2014-11-11 22:32:00
5 NaT
6 2014-11-11 22:34:00
Name: DATETIME, dtype: datetime64[ns]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.