首页 > 解决方案 > 如何在处理列的其余部分时将导致错误的数据插入到单独的文件中?

问题描述

我正在制作一个处理超过 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,它不会处理该块中的数据列。

如何在让程序继续处理列的同时将数据和错误放入文件中?

标签: pythonpandasbigdata

解决方案


@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']

推荐阅读