Как вставить данные, которые вызывают ошибку, в отдельный файл при обработке остальной части столбца? - PullRequest
0 голосов
/ 26 сентября 2019

Я создаю программу, которая обрабатывает более 20 миллионов строк и более 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

Я использую чанкинг для извлечения данных (например, 1 миллион строк ввремя).Я хочу поместить данные, которые вызывают ошибки, в отдельный файл.Но когда я использую try except, он не обрабатывает столбец данных в этом чанке.

Как получить данные и ошибки в файл, позволяя программе продолжать обработку столбца?

1 Ответ

0 голосов
/ 26 сентября 2019

Что означает @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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...