首页 > 解决方案 > 如何将文本文件转换为不同的熊猫数据框?

问题描述

我的程序在 .txt 文件中给出了输出。此输出中有 3 个不同的表。我需要将这三个表转换为熊猫数据框。我不确定解决此问题的最佳方法是什么。

这是我的 .txt 输出文件的样子:

                      column_header standard_content (Old) standard_content (New)
214    STAFF_ORIGIN_IND_NATIVE_AMER                      N                      Y
215    STAFF_ORIGIN_IND_PACIF_ISLND                      N                      Y
128     STUDENT_INFORMATION_RELEASE                      N                      Y
211          STAFF_ORIGIN_IND_ASIAN                      N                      Y
105  STUDENT_ORIGIN_IND_NATIVE_AMER                      N                      Y
104     STUDENT_ORIGIN_IND_HISPANIC                      N                      Y
160       STUDENT_OUTSIDE_CATCHMENT                      N                      Y
346     COURSE_EXTRA_POINT_ELIGIBLE                      N                      Y
528             SUBSTITUTE_REQUIRED                      N                      Y
527        STAFF_ABSENCE_AUTHORIZED                      N                      Y

                     column_header data_req (Old) data_req (New)
20               SCHOOL_SIZE_GROUP              N              Y
241                  STAFF_CONTACT              N              Y
346    COURSE_EXTRA_POINT_ELIGIBLE              N              Y
434   DISCIPLINE_FED_OFFENSE_GROUP              N              Y
32          SCHOOL_ATTENDANCE_TYPE              N              Y
142       STUDENT_COUNTRY_OF_BIRTH              N              Y
74            FACILITY_COUNTY_CODE              N              Y
64         FACILITY_PARKING_SPACES              N              Y
436  DISCIPLINE_DIST_OFFENSE_GROUP              N              Y
321          STAFF_BARGAINING_UNIT              N              Y

                   column_header element_type (Old) element_type (New)
331                DISTRICT_CODE                Key              Local
511                DISTRICT_CODE                Key              Local
445                DISTRICT_CODE                Key              Local
2                  DISTRICT_CODE                Key              Local
302  STAFF_ASSIGN_FINANCIAL_CODE                Key              Local
493            SCHEDULE_SEQUENCE                Key              Local
461                  INCIDENT_ID                Key              Local
431                  INCIDENT_ID                Key              Local
159       STUDENT_CATCHMENT_CODE                Key              Local
393                DISTRICT_CODE                Key              Local

我试图在循环中使用它,但它创建了一个数据框并且它被搞砸了。

   df = pd.read_fwf(io.StringIO(report)
             df.to_csv('data.csv')
             result_df = pd.read_csv('data.csv', )
             print("Final report", result_df)

有没有一种方法可以基于关键字创建一个新的数据框,例如“column_header”,或者我可以通过任何其他方式来做到这一点?

标签: pythonpandasparsing

解决方案


只需几个步骤即可。

  • 啜食整个文件
  • 根据分隔符拆分(空行)
  • 将每个部分读入单独的数据帧

如果我们让RAW_DATA你的文件的内容,这可以用

  dfs = [pd.read_fwf(StringIO(part), 
                      header=None, skiprows=1, 
                      names=['id', 'header', 'old', 'new']) 
         for part in raw_data.strip().split('\n\n')]

拆分查找空行。read_fwf 调用使用几个 pandas TextParser选项来跳过标题行并显式命名列(实际的列标题会抛弃固定宽度的解析器)。

第一帧看起来像

    id                          header old new
0  214    STAFF_ORIGIN_IND_NATIVE_AMER   N   Y
1  215    STAFF_ORIGIN_IND_PACIF_ISLND   N   Y
2  128     STUDENT_INFORMATION_RELEASE   N   Y
3  211          STAFF_ORIGIN_IND_ASIAN   N   Y
4  105  STUDENT_ORIGIN_IND_NATIVE_AMER   N   Y
5  104     STUDENT_ORIGIN_IND_HISPANIC   N   Y
6  160       STUDENT_OUTSIDE_CATCHMENT   N   Y
7  346     COURSE_EXTRA_POINT_ELIGIBLE   N   Y
8  528             SUBSTITUTE_REQUIRED   N   Y
9  527        STAFF_ABSENCE_AUTHORIZED   N   Y

推荐阅读