Разбор грязного текстового файла с проблемой заголовка Pandas - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь разобрать текстовый файл, созданный еще в 99 году, с которым немного сложно справиться.Заголовки находятся в первой строке и разделены символом «^» (весь файл разделен символом «^»).Проблема заключается в том, что есть символы, которые могут быть добавлены (например, длинные строки пробелов отделяют заголовки от остальных точек данных в файле. (Пример файла расположен по адресу https://www.chicagofed.org/applications/bhc/bhc-home Мой пример былссылка на Q3 1999).

Проблемы: 1) Слишком много заголовков, чтобы создать их вручную, и мне нужно сделать это для многих файлов, которые могут иметь новые заголовки, когда мы продвигаемся вперед или назад в течение временного ряда 2) Мне нужновоссоздать заголовки из файла, а затем удалить их, чтобы не загрязнять всю первую строку дубликатами заголовков.Я понимаю, что, возможно, смогу нарезать информационный фрейм [1:] по факту и просто избавиться от него, но это неаккуратно, и я уверен, что есть лучший способ.3) незарегистрированные поля по компаниям отображаются как «^^^^^^^^^», что хорошо, но будут ли панды автоматически заполнять NaN в этом сценарии?

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

from zipfile import ZipFile
import pandas as pd

def main():
    #Driver

    FILENAME_PREFIX = 'bhcf'
    FILE_TYPE = '.txt'
    field_headers = []

    with ZipFile('reg_data.zip', 'r') as zip:

        with zip.open(FILENAME_PREFIX + '9909'+ FILE_TYPE) as qtr_file:
            headers_df = pd.read_csv(qtr_file, sep='^', header=None)

            headers_df = headers_df[:1]
            headers_array = headers_df.values[0]

            parsed_data = pd.read_csv(qtr_file, sep='^',header=headers_array)

1 Ответ

0 голосов
/ 31 января 2019

Я пытаюсь использовать файл, на который вы ссылались, и файл, который я скачал, думаю, с 2015 года:

import pandas as pd
df = pd.read_csv('bhcf9909.txt',sep='^')
first_headers = df.columns.tolist()
df_more_actual = pd.read_csv('bhcf1506.txt',sep='^')
second_headers = df_more_actual.columns.tolist()
print(df.shape)
print(df_more_actual.shape)
# df_more_actual has more columns than first one
# Normalize column names to avoid duplicate columns
df.columns = df.columns.str.upper()
df_more_actual.columns = df_more_actual.columns.str.upper()
new_df = df.append(df_parsed2)
print(new_df.shape)

В конечном кадре данных есть строки как csv, так и объединение столбцов из них.Вы можете сделать это для CSV каждого квартала и добавить его, чтобы в итоге у вас были все их строки и объединение столбцов.

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