Как загрузить текстовый файл в фрейм данных python

#python #pandas #dataframe #text #python-import

#python #pandas #фрейм данных #текст #python-импорт

Вопрос:

Я пытаюсь загрузить текстовый файл, который содержит данные, как показано ниже. У меня в файле около 1 млн записей. Данные состоят из разных полей (которые должны быть столбцами), в которые я вручную добавил запятую в качестве разделителя. Проблема в том, что все записи не имеют одинакового набора полей. Столбцы должны быть «Time», «ENTER», «TRANSID», «SUPERCODE», «ID», «MRP», «VOLUME», «VALUE», «ProductType», «BUILDING», «TAXNUM», «TAGFIELDS»

00:00:00.000:, ENTER, TransID = 1, Суперкод = BD3G, id = 1, MRP = 0.12s9, объем = 110333, значение = 20942463.27, productype= se IA CF, building = 11430, taxnumber = 110F1, tagFields={B= C C = NZd3 /1D =»20170514 07:41:53.616″ F =:00000017PouM H = LMT O = 6521B841:00023662-A-15.1sd01.200.0.50dsd03.0.0 R =»Заказ не добавлен» a = A c = FIRST3eNZA j = N}

00:00:00.000:, ENTER, TransID= 2, Supercode= BYG, id = 2, MRP = 0.195, volume= 223000, value = 43485,> productype= se IA CF, building= 110, taxnumber= 110I1, tagFields={B = C> C = NZ3 D =»20170514 07:41:25.161″ F =:00000017PouK H = LMT> O = 6521B841:00023625-A-15.101.200.0.5003.0.0 R =»Порядок не добавлен» a = A> c= FIRSTNZA j = N}

#Для этой записи нет taxnumber , поэтому поле столбца TaxNumber должно быть пустым / Nan для этой записи 00:00:00.000:, ENTER, TransID=3, Supercode= TBC, id = 3, MRP = 2.71, volume = 3750, value = 10162.5, productype=It CFUeCP,> building= 110, tagFields={B= C C= 4331K D=»20170514 > 13:59:51.288″ H = LMT K = 12345O = 6521B841:0027d59B6-B-15.101.200.0.5009.0.0 R= «Заказ не добавлен» a = P c = 4sd33E> j = N}

#Для этой записи нет номера здания, поэтому поле столбца номера здания должно быть пустым / Nan для этой записи

00:00:00.000:, ENTER, TransID = 4, Supercode = ABT, id = 4, MRP = 2.73,> volume = 357, value = 974.61, productype= se IrA CtF, taxnumber = 110B1, tagFields={B = C C = ZBJF D =»20170929 16:10:01.321″ H = LT O = 6521B5841:003A98565-A-15.101.2050.0.5009.0.0 R=»Заказ не добавлен» a = A c = BNPLLCOLO j = Y}

Я попробовал следующие шаги:

data = pd.read_csv(«path.txt «,разделитель =»,»,заголовок= Нет)

Я получил вывод

Ошибка синтаксического анализа: ошибка токенизации данных. Ошибка C: ожидалось 10 полей в строке 66017, увидел 11

Ответ №1:

попробуйте использовать engine='python' и error_bad_lines=False в вашем pd.read_csv()

Ответ №2:

Вот небольшой скрипт для преобразования вашего файла данных в файл csv:

 import csv

columns =  "TIME ENTER TRANSID SUPERCODE ID MRP VOLUME VALUE PRODUCTYPE BUILDING TAXNUMBER TAGFIELDS".split()

with open("path.txt") as source, open("path.csv", "w") as sink: 
    writer = csv.DictWriter(sink, fieldnames=columns, restval='')
    writer.writeheader()

    for line in source:
        time, enter, *tail = line.split(',')
        key_value_pairs = (item.strip().split('=', maxsplit=1) for item in tail)
        d = {'TIME':time, 'ENTER':enter.strip()}
        d.update((key.upper(),value) for key, value in key_value_pairs)

        writer.writerow(d)
  

Затем вы можете использовать:

 df = pandas.read_csv("path.csv")
  

для загрузки данных.

Комментарии:

1. Привет @RootTwo — я попробовал это, но я получаю сообщение об ошибке, как показано ниже UnsupportedOperation: недоступно для записи

2. @vishnu, извините, open("path.csv") was missing the mode «w»`. Исправлено.

3. Привет @RootTwo, спасибо, но мне жаль говорить, что это не сработало, после выполнения вышеуказанных команд все данные были удалены из файла и заменены одной строкой с заголовком столбца.