Использование Pandas для чтения данных и пропуска метаданных - PullRequest
1 голос
/ 30 апреля 2020

Фон

У меня есть файлы данных, которые состоят из двух частей: данные в формате CSV и метаданные. Я могу использовать метод, приведенный здесь 1 и здесь 2 , чтобы вручную пропустить часть метаданных, указав расположение / номер строки начала метаданных.

Следующий пример файла данных:

3

Здесь вы можете видеть, что я могу указать номер строки (420) вручную и использовать следующий код чтобы пропустить метаданные:

with open('data.csv', 'r') as f:
    metadata_location = [i for i, x in enumerate(f.readlines()) if 'Metadata' in x]
with open('data.csv', 'r') as f:
    flat_data = pd.read_csv(f, index_col=False, skiprows=lambda x: x >= metadata_location[0])

with open('data.csv') as f:
    df = pd.read_csv(f, index_col=False)
df = df[:420]

Вопрос

Как я могу отсканировать файл для захвата метаданных, а затем пропустить чтение? (Мне нужно будет обработать несколько таких файлов, поэтому я буду sh писать такой код)

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

IIU C, Вы можете передать вызываемую функцию в аргумент skiprows, который будет оцениваться по индексам строки, возвращая True, если строка должна быть пропущена, и False в противном случае. Используйте:

df = pd.read_csv("data.csv", index_col=False, skiprows=lambda x: x >= 420)

ОБНОВЛЕНИЕ: Чтобы найти расположение метаданных:

import re

md_loc = 0
with open("data.csv") as f:
    for idx, line in enumerate(f):
        if re.search(r'^"Metadata:\s*"$', line):
            md_loc = idx
1 голос
/ 30 апреля 2020

Вам вопрос не понятен. Если я вас правильно понял, вы ищете способ отсканировать все строки и запустить приведенный выше код для каждой?

РЕДАКТИРОВАТЬ 1:

for index, row in All_Patients_Chosen_Visit.iterrows(): df = row[:420]

См. код выше. Проверьте, работает ли

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