我有各种文件,其中有数千行,没有标题。每行的内容具有以下结构:
第一个元素('LGAV')代表始发机场,第二个元素('EGGW')代表目的地机场,这是唯一可使用的相关数据。我的目标是在最繁忙的机场中排名前十。我想将排名存储在具有以下内容的字典中:
'nameAirport':[totalNumberOfMovements,numberTakeOffs,numberLandings]
在numberTakeOffs之后,机场重复作为起点的次数,numberLandings在机场重复重复作为目的地的次数,totalNumberOfMovements之前的计数之和。
例如:
TAKEOFFS: {'EHAM': 55, 'EGLL': 46, 'LOWW': 44, 'LFPG': 43, 'LTBA': 38, 'EDDF': 37, 'LEMD': 34, 'EKCH': 33, 'EGKK': 31, 'LFPO': 30, ....
LANDINGS: {'LEMD': 37, 'EDDM': 35, 'LEBL': 34, 'LFPO': 33, 'LFPG': 32, 'EKCH': 29, 'LTBA': 27, 'LSZH': 25, 'ENGM': 25, 'LTFJ': 24, 'LOWW': 23, 'EHAM': 23, ....
FINAL_DICT: {'EHAM': [78,55,23], 'EGLL': [67,46,21], 'LOWW': [67,44, 23], 'LFPG': [75,43, 32], ....
我对到目前为止的代码不满意,传递最大文件时花费的时间太长。我也不知道如何获得所需的输出数据格式
'nameAirport': [totalNumberOfMovements, numberTakeOffs, numberLandings]
到目前为止的代码:
# Libraries
import pandas as pd
import collections
from itertools import chain
from collections import defaultdict
# START
# Load Data from file
df = pd.read_csv('traffic1day.exp2', header=None, sep=';', usecols=[0,1])
# Dictionary 1 for aircrat takeOffs
# 'LPPD' header for origin airports
takeOffs = df[0].value_counts()
dict_1 = takeOffs.to_dict()
print("TAKEOFFS: ", dict_1)
# Dictionary 2 for aircraft landings
# 'LEMD' header for destination airports
landings = df[1].value_counts()
dict_2 = landings.to_dict()
print("\nLANDINGS: ", dict_2)
dict_3 = defaultdict(list)
for key, value in chain(dict_1.items(), dict_2.items()):
dict_3[key].append(value)
# Combine dict_1 and dict_2 keys:values
combined_dict = collections.Counter(dict_3).most_common(10)
print("\n------ Combined dictionary from dict_1 and dict_2 values:
\n\n",combined_dict)
# Sum values from same key
new_dict = defaultdict(list)
for key, value in combined_dict:
new_dict[key] = {"Total": sum(value), "T, L": value}
print("\n------ Sum of values from combined dictionary for each key:
\n\n", new_dict)
# END
我有点不确定您到底需要什么帮助。您已经添加了标签“ Bigdata”,并且使用了所使用的库,因此您看起来并不像新手。但是,如果我正确理解了您的问题,那么我认为可以这样解决:
def data_loader(filename_as_string):
try:
df = pd.read_csv(filename_as_string, sep=';')
else:
df = pd.read_csv(filename_as_string, sep=';', header = None)
return df
由于您只需要前两列,因此您也可以执行以下操作:
df = pd.read_csv('traffic1hour.exp2', sep=';', header = None, usecols=[0,1])
我希望这会有所帮助。如果不是,请让我知道,我将删除我的评论。