Как импортировать неструктурированный плоский файл в Python, используя pandas? - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь импортировать файл .db в pandas. Файл упорядочен следующим образом:


Person 1

Characteristic 1: Value 

Characteristic 2: Value


Person 2

Characteristic 1: Value

Et c


Я хочу импортировать данные в pandas и получить людей в виде строк с разными характеристики в столбцах:


Person Characteristic 1 Characteristic 2

Person 1 Value Value

Person 2 Value Value

Et c


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

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 13 января 2020

Допущения:

  • input - это текстовый файл, ориентированный на строки
  • пустые строки должны игнорироваться
  • строки, не содержащие двоеточия (':'), объявляют a новая запись
  • строки, содержащие двоеточия, объявляют атрибуты для текущей записи

Это не тот формат файла, который pandas может обрабатывать напрямую, но Python может легко составить список записи, которые позже будут снабжать фрейм данных:

records = []
current = None
fieldnames = ['Person']

with open('inputfile') as file:
    for line in file:
        line = line.strip()
        if len(line) != 0:            # ignore empty lines
            if ':' in line:           # a characteristic line
                attr, value = line.split(':', 1)
                attr = attr.strip()
                current[attr] = value.strip()
                if not attr in fieldnames:
                    fieldnames.append(attr)
            else:                                      # a person line
                current = {'Person': line}
                records.append(current)

df = pd.DataFrame(columns = fieldnames, data = records)

С вашими данными выборки, это дает, как и ожидалось:

     Person Characteristic 1 Characteristic 2
0  Person 1            Value            Value
1  Person 2            Value              NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...