让我们假设我在python
和pandas
中运行以下几行:
# Load data
data = pd.read_csv('C:/Users/user/Desktop/data.txt',\
keep_default_na=True, sep='\t', na_values='?')
# Convert to datetime column
data['Date'] = pd.to_datetime(data['Date'], errors='raise', dayfirst=True)
但是,我想查看此列的所有数据,它们在熊猫中引发了异常。
基于这个原因,我写了这个:
exceptions = []
for index, row in data.iterrows():
try:
row['PICKUP_DT'] = pd.to_datetime(row['PICKUP_DT'], errors='raise', dayfirst=True)
except:
exceptions.append(row['PICKUP_DT'])
dataframe = pd.DataFrame({'Exceptions': exceptions})
dataframe.to_csv('C:/Users/user/Desktop/EXCEPTIONS.csv', index=False, na_rep='NA')
还有更好的方法吗?
我实际上认为会有一种内置的pandas
方法来实现这一点。
答案 0 :(得分:1)
使用.loc
获取所有有问题的行,并使用.isnull()
检查errors='coerce'
的结果。我排除了NaN
,因为pd.to_datetime
不会为空值引发错误。
import pandas as pd
import numpy a np
data = pd.DataFrame({'Date': [np.NaN, '12-03-2019', '001111231', '46-06-1988']})
# Date
#0 NaN
#1 12-03-2019
#2 001111231
#3 46-06-1988
data.loc[pd.to_datetime(data.Date, errors='coerce', dayfirst=True).isnull()
& data.Date.notnull(), 'Date']
#2 001111231
#3 46-06-1988
#Name: Date, dtype: object