python - 如何在处理列的其余部分时将导致错误的数据插入到单独的文件中?
问题描述
我正在制作一个处理超过 2000 万行和超过 50 列数据的程序。我正在尝试检查其中一列中的数字是偶数还是奇数。
如果是偶数,则将“E”插入不同的列;如果奇数,则在列中插入“O”。
DF_FILE_IN = pd.read_csv('3MB_2.txt',chunksize=1000,sep='\t',dtype=str,engine='c',header=0,encoding='latin-1')
out_fields = ['HSNBR','OEFLAG']
for DF_FILE in DF_FILE_IN:
df_out1 = pd.DataFrame(dtype='str',columns=out_fields)
df_out1['HSNBR'] = DF_FILE['ANumber'].map(lambda x: f'{x:0>6}')
df_out1.loc[pd.to_numeric(df_out1['HSNBR']).map(lambda x: (x % 2 == 0) & (x != 0)), 'OEFLAG'] = 'E'
df_out1.loc[pd.to_numeric(df_out1['HSNBR']).map(lambda x: (x % 2 != 0) & (x != 0)), 'OEFLAG'] = 'O'
但有些数据有字母、符号、空格等。
当我运行它时,这行代码会弹出一个错误:
df_out1.loc[pd.to_numeric(df_out1['HSNBR']).map(lambda x: (x % 2 == 0) & (x != 0)), 'OEFLAG'] = 'E'
并说(示例):
ValueError: Unable to parse string "111 1/2g" at position 10
我正在使用分块来提取数据(例如,一次 100 万行)。我想将导致错误的数据放入单独的文件中。但是当我使用 时try except
,它不会处理该块中的数据列。
如何在让程序继续处理列的同时将数据和错误放入文件中?
解决方案
@BernardL 的意思是编写如下函数:
def even_odd(x):
x = str(x)
if x.isnumeric():
x = int(x)
if (x % 2 == 0) and (x != 0):
return 'E'
if (x % 2 != 0) and (x != 0):
return 'O'
return 'error'
然后应用它:
df_out1['OEFLAG'] = df_out1['HSNBR'].map(even_odd)
然后您可以通过以下方式消除错误:
df_out1[df_out1['OEFLAG'] == 'error'].to_csv('errors_file.csv')
df_out1 = df_out1[df_out1['OEFLAG'] != 'error']
推荐阅读
- javascript - 更改从 v-for 生成的布尔 v-model
- python - OSError:SavedModel 文件不存在于:related_files/facenet_keras.h5/{saved_model.pbtxt|saved_model.pb} 无法执行脚本 gui
- arrays - 在 Typescript 中,如何将字符串转换为字符串数组?
- node.js - nodejs将facebook登录与jwt auth集成
- jenkins - 从谷歌云访问本地 Jenkins
- r - 即使使用 NA 也将所有变量保存在 for 循环中
- json - JSON在图像旁边添加文本
- wordpress - 摘录不适用于 Wordpress 默认帖子,但适用于自定义帖子类型
- ios - 启动初始视图控制器时的 textField SlideAnimation
- ios - 在 M1 Mac 上运行的 iOS 模拟器上的 Flutter iOS App