read_table обработка пропущенных строк - PullRequest
0 голосов
/ 05 ноября 2019

При попытке импортировать данные из файла .txt с помощью панд read_table() я столкнулся с интересной проблемой.

Файл содержит столбец, частично заполненный строками ( OrigVol ). Пустые ячейки затем заполняются значениями из следующего столбца, и в конце добавляются NaN, где этот сдвиг приводит к пустым ячейкам. На рисунке ниже показан результат использования pd.read_table( file.txt, sep = r'\s+') после import pandas as pd.

enter image description here

Столбец OrigVol должен содержать пустые строки или NaN вместо столбца prim_pos_eutags . Я новичок в панде, и трудно придумать MWE, который точно воспроизводит проблему. Нужно было бы файл (который я не мог загрузить).

Возможно, я пропустил указание опции импорта. Дайте мне знать, если требуется дополнительная информация.

Любые советы приветствуются!

В соответствии с предложением я предоставляю первые 8 строк файла примера

Name            Subtype     ProcName            Material    Creator     OrigVol trklen                  prim_pos_eutags
top             0           initStep            undefined   undefined   top     0                       prim_pos_eudata
top             91          Transportation      Vacuum      undefined           2.27009877562523E-12    prim_pos_eudata
QC5L_2_v        91          Transportation      Vacuum      undefined           3.50000000000227        prim_pos_eudata
DRIFT_8609_v    91          Transportation      Vacuum      undefined           3.80000000000518        prim_pos_eudata
BC1L_2_v        23          SynRad              Vacuum      undefined           68.1607816456518        prim_pos_eudata
BC1L_2_v        91          Transportation      Vacuum      undefined           79.0910350747966        prim_pos_eudata
DRIFT_8610_v    91          Transportation      Vacuum      undefined   QC2_v   79.3910346856657        prim_pos_eudata

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Благодаря предложениям Анант Миттал проблема может быть решена.

Однако я сделал несколько небольших изменений, чтобы получить чистый кадр данных с первой строкой в ​​качестве заголовка.

input_file  = open('test.txt', "r")
data = []
for line in input_file:
    splitted_list = line.split()

    if len(splitted_list) == 8: data.append( splitted_list )
    if len(splitted_list) < 8: # 8 is number of columns, change it if it is wrong
        splitted_list.insert(5, "") # add an empty string inn the 5th column (change the number if it is wrong)
        data.append(splitted_list)

test = pd.DataFrame.from_records( data )

# first row to select header
header = test.iloc[0] 
# exclude first line 
test = test[1:] 
# reset the header
test.columns = header
test
0 голосов
/ 05 ноября 2019

Столбцы разделены переменным количеством пробелов, чтобы столбцы выглядели красиво и выровнены в текстовом файле. Вместо этого вы можете читать файл построчно, разбивать строку и видеть, меньше ли количество элементов в списке, генерируемом с line.split(), чем число столбцов. Если да, то добавьте пустую строку с нужным индексом.

input_file  = open('test.txt', "rb")
data = []
for line in input_file:
    splitted_list = line.split()
    if len(splitted_list) < 8: # 8 is number of columns, change it if it is wrong
        splitted_list.insert(5, "") # add an empty string inn the 5th column (change the number if it is wrong)
        data.append(splitted_list)
df = pd.DataFrame.from_records(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...