При импорте нескольких файлов CSV отфильтруйте строки для импорта по верхней ячейке - PullRequest
0 голосов
/ 15 апреля 2019

Я хотел бы импортировать большое количество CSV-файлов, которые содержат данные за несколько дней.

Вот пример данных, первые пять строк:

PostDaily;07.04.2019
Leg Number;Aircraft Manufacturer;Aircraft Type;Day Of Origin;AC Logical Number;Airline Designator;Flight Number;Flight Number Suffix;Tail Sign;Scheduled Departure Airport;Scheduled Arrival Airport;Scheduled Departure DateTime;Scheduled Arrival DateTime;Offset DA;Offset AA;Actual Departure Airport;Actual Arrival Airport;Actual Departure DateTime;Actual Arrival DateTime;Flight Type;Pax Booked;Pax Flown;Crew;Leg State;Meals;Best;Biz
27507094;Other;73H;06.04.2019;29;WW;0584; ;-GABAF-;GGN;PMI;06.04.2019 02:35;06.04.2019 05:00;+02:00;+02:00;CGN;PMI;06.04.2019 02:40;06.04.2019 04:52;J;129;123;X3.../X3...//X3TUI;ARR;41;0;0
27507179;Other;73H;06.04.2019;29;WW;0585; ;-GABAF-;PMI;GGN;06.04.2019 05:45;06.04.2019 08:05;+02:00;+02:00;PMI;CGN;06.04.2019 05:44;06.04.2019 07:48;J;41;40;X3.../X3...//X3TUI;ARR;29;0;0
27506541;Other;73H;06.04.2019;29;WW;0526; ;-GABAF-;GGN;BCN;06.04.2019 09:30;06.04.2019 11:50;+02:00;+02:00;CGN;BCN;06.04.2019 09:44;06.04.2019 11:47;J;183;174;X3.../X3...//X3TUI;ARR;50;0;0

К сожалению, данные перекрываются, и мне нужно изменить существующий код импорта, чтобы Python импортировал только те строки, которые имеют одинаковыезначение в столбце «Дата происхождения» в качестве верхней строки (которое также необходимо удалить в конце).Более того, скрипт импорта должен работать на Mac и Windows.

Это код, который я использую для импорта файлов CSV.Это работает очень хорошо, пока я не понял, что в файлах CSV есть дубликаты (не 100% дубликаты, так как некоторые строки имеют разные значения).

sector_ytd = pd.concat([pd.read_csv(f, delimiter=";", skiprows=1) for f in sector_folder.glob('4UDailyPos*.csv')], ignore_index = True)

Первая строка в каждом CSV-файле содержит эти данные:

PostDaily;07.04.2019

Теперь я хотел бы импортировать или объединять только те строки моего CSV-файла, где столбец Date of Originравно дате в первой строке (после PostDaily;)

В результате у меня будет один кадр данных со строками дат в несколько дней, но больше не будет дубликатов.

1 Ответ

0 голосов
/ 15 апреля 2019

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

import pandas as pd
import csv

def parse_file(file):

    # Grab the first line of the file
    with open(file, 'r') as f:
        first_line = f.readline()

    # Parse the date out from the first line
    day = first_line.split(';')[1].strip()

    # Go ahead and read in the entire csv file
    df = pd.read_csv(file, sep=';', header=1)

    # Return the data from just that one day
    return df.loc[df['Day Of Origin'] == day]


df = parse_file('log.csv')
print(df[['Leg Number', 'Aircraft Type', 'Day Of Origin']])

#    Leg Number Aircraft Type Day Of Origin
# 1    27507179           73H    07.04.2019
# 2    27506541           73H    07.04.2019
# 3    27507179           73H    07.04.2019
# 4    27506541           73H    07.04.2019

Затем, чтобы просмотреть их все, просто используйте * 1004.* method

sector_ytd = pd.concat(
    # Pass your filename to the function rather going straight to pd.read_csv()
    [parse_file(f) for f in sector_folder.glob('4UDailyPos*.csv')],
    ignore_index = True)

Чтобы показать вам, что функция фильтрует, вот CSV-файл, который я использовал.Это немного измененная форма, которую вы опубликовали, чтобы она содержала действительные и недействительные строки.

PostDaily;07.04.2019
Leg Number;Aircraft Manufacturer;Aircraft Type;Day Of Origin;AC Logical Number;Airline Designator;Flight Number;Flight Number Suffix;Tail Sign;Scheduled Departure Airport;Scheduled Arrival Airport;Scheduled Departure DateTime;Scheduled Arrival DateTime;Offset DA;Offset AA;Actual Departure Airport;Actual Arrival Airport;Actual Departure DateTime;Actual Arrival DateTime;Flight Type;Pax Booked;Pax Flown;Crew;Leg State;Meals;Best;Biz
27507094;Other;73H;06.04.2019;29;EW;0584; ;-GABAF-;GGN;PMI;06.04.2019 02:35;06.04.2019 05:00;+02:00;+02:00;CGN;PMI;06.04.2019 02:40;06.04.2019 04:52;J;129;123;X3.../X3...//X3TUI;ARR;41;0;0
27507179;Other;73H;07.04.2019;29;EW;0585; ;-GABAF-;PMI;GGN;06.04.2019 05:45;06.04.2019 08:05;+02:00;+02:00;PMI;CGN;06.04.2019 05:44;06.04.2019 07:48;J;41;40;X3.../X3...//X3TUI;ARR;29;0;0
27506541;Other;73H;07.04.2019;29;EW;0526; ;-GABAF-;GGN;BCN;06.04.2019 09:30;06.04.2019 11:50;+02:00;+02:00;CGN;BCN;06.04.2019 09:44;06.04.2019 11:47;J;183;174;X3.../X3...//X3TUI;ARR;50;0;0
27507179;Other;73H;07.04.2019;29;EW;0585; ;-GABAF-;PMI;GGN;06.04.2019 05:45;06.04.2019 08:05;+02:00;+02:00;PMI;CGN;06.04.2019 05:44;06.04.2019 07:48;J;41;40;X3.../X3...//X3TUI;ARR;29;0;0
27506541;Other;73H;07.04.2019;29;EW;0526; ;-GABAF-;GGN;BCN;06.04.2019 09:30;06.04.2019 11:50;+02:00;+02:00;CGN;BCN;06.04.2019 09:44;06.04.2019 11:47;J;183;174;X3.../X3...//X3TUI;ARR;50;0;0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...