转换为日期时间-查看所有引发数据异常的数据

时间:2019-04-17 18:29:34

标签: python pandas

让我们假设我在pythonpandas中运行以下几行:

# 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方法来实现这一点。

1 个答案:

答案 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