我使用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 ...
答案 0 :(得分:0)
我认为您需要to_datetime
+ dropna
来删除NaT
行:
df['PASSTIME'] = pd.to_datetime(df['PASSTIME'], errors='coerce')
df = df.dropna('PASSTIME')