解析带有Pandas标头问题的脏文本文件

时间:2019-01-30 23:16:07

标签: python pandas text

我正在尝试解析一个早于99年创建的文本文件,该文本文件有些难以处理。标题位于第一行,并以'^'分隔(整个文件以^分隔)。问题是有些字符似乎被抛出(例如,长行空格似乎使标题与文件中其余数据点分开。(示例文件位于https://www.chicagofed.org/applications/bhc/bhc-home,我的示例正在引用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 :(得分:1)

我尝试使用您链接的文件,然后下载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执行此操作并追加它,这样最终您将拥有它们的所有行以及列的并集。