Как преобразовать текстовый файл в различные кадры данных панд? - PullRequest
2 голосов
/ 01 октября 2019

Моя программа выдает вывод в виде файла .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

Я пытался использовать это в цикле, но он создает одиночный фрейм данных, и он запуталсяup.

   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 Ответ

2 голосов
/ 01 октября 2019

Делайте это за несколько шагов.

  • Делите весь файл
  • , разделив его в соответствии с разделителем (пустые строки)
  • , читайте каждую часть в отдельном кадре данных

если мы позволим 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 использует несколько панд 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
...