使用astype获取ValueError时如何从数据帧中删除错误的行

时间:2017-10-23 09:12:54

标签: python pandas

我使用pandas的astype函数将字符串解析为datetime64 [ns]格式的数据,但由于原始数据中存在一些异常值,因此会导致程序出错。

我想从ValueError异常中获取错误的数据索引并删除索引数据,而不是因为ValueError而中断程序。或者还有其他方法可以实现我的目标吗?

通过astype解析datetime时,我收到以下错误提示。我想从ValueError异常中获取错误的数据索引并删除索引数据。:

  File "/home/xiaopeng/anaconda3/envs/tensorflow/lib/python3.5/site-packages/pandas/core/dtypes/cast.py", line 636, in astype_nansafe
    return arr.astype(dtype)
ValueError: Error parsing datetime string "2017-06-01VERSION=1.0" at position 10

代码如下,该函数的主要功能是从文本文件中读取数据,并解析数据:

def file_to_df(file):
    print('converting file:%r(%r MB)' %(file,(os.path.getsize(file)/(1024*1024))))

    df = pd.read_csv(file, sep='\t', header=None, names=columns)

    for k in df.columns:
        _, df[k] = df[k].astype(str).str.split('=',1).str

    df = df[columns_use]

    # startswith() ,delete the wrong data when startswith is not '20'
    df = df[df['PASSTIME'].astype(str).str.startswith("20")]

    print('Log: Get %r number of data' % len(df))

    df['PASSTIME'] = df['PASSTIME'].astype(str).str.replace(' ', '?', n=1)
    df['PASSTIME'] = df['PASSTIME'].astype(str).str.replace(' ', '.', n=1)
    df['PASSTIME'] = df['PASSTIME'].astype(str).str.replace('?', ' ', n=1)

    df['PASSTIME'] = df['PASSTIME'].astype('datetime64[ns]')

    return df

和解析错误数据如下:

VERSION=1.0 PASSTIME=2017-06-01 11:01:46 625    CARSTATE=1  ...
VERSION=1.0 PASSTIME=2017-06-01VERSION=1.0  PASSTIME=2017-06-01 11:04:02 618    CARSTATE=1  ...
VERSION=1.0 PASSTIME=2017-06-01 11:04:49 595    CARSTATE=1  ...

1 个答案:

答案 0 :(得分:0)

我认为您需要to_datetime + dropna来删除NaT行:

df['PASSTIME'] = pd.to_datetime(df['PASSTIME'], errors='coerce')
df = df.dropna('PASSTIME')