导入多个CSV文件时,按顶部筛选要导入的行

2024-06-07 07:17:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想导入大量的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只导入在列“Date of Origin”中具有与顶行相同值的行(最后还需要删除)。此外,导入脚本需要在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;之后)

结果是我有一个数据帧,其中的日期行是几天,但没有更多的重复。你知道吗


Tags: 文件csv数据numberdatetimeoriginflightpmi
1条回答
网友
1楼 · 发布于 2024-06-07 07:17:02

为什么不创建一个函数来解析每个文件?下面是一种从文件顶部获取日期的方法,然后过滤数据帧以仅返回与日期匹配的行。你知道吗

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

然后使用concat方法来循环所有这些方法

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

相关问题 更多 >