我想导入大量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
之后)
结果将是我有一个数据框,其中的日期行为几天,但没有更多重复项。
答案 0 :(得分:0)
为什么不创建一个解析每个文件的函数?下面是一种从文件顶部获取日期,然后过滤DataFrame以仅返回与日期匹配的行的方法。
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