如何将文本文件转换为不同的熊猫数据框?

时间:2019-10-01 15:21:36

标签: python pandas parsing

我的程序在.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”或任何其他可以这样做的方式。

1 个答案:

答案 0 :(得分:2)

只需几个步骤即可完成

  • 处理整个文件
  • 根据分隔符(空行)分割
  • 将每个部分读入单独的数据框

如果我们将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 options跳过标题行并显式命名列(实际的列标题抛出固定宽度的解析器)。

第一帧看起来像

    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