我有一个列的标题名,来自一系列有50多个字段的大量csv文件。在这些文件中,我需要的列的索引并不总是相同的
我编写了代码,可以在每个文件中找到列的索引号。现在我只想添加这个列作为字典中的键,在字典中,这个值计算这个列中唯一字符串的数量
因为这些csv文件是海量的,而且我正在尝试使用最佳实践来实现高效的数据工程,所以我正在寻找一种使用最少内存的解决方案。我找到的每一个将csv写入字典的解决方案都涉及将csv中的所有数据写入字典,我认为这是没有必要的。最好的解决方案似乎只需要读入这一列的数据,然后将这一列添加到dictionary键中
所以,让我们把这个作为样本数据:
FOODS;CALS
"PIZZA";600
"PIZZA";600
"BURGERS";500
"PIZZA";600
"PASTA";400
"PIZZA";600
"SALAD";100
"CHICKEN WINGS";300
"PIZZA";600
"PIZZA";600
我想要的结果是:
food_dict = {'PIZZA': 6, 'PASTA': 1, 'BURGERS': 1, 'SALAD': 1, 'CHICKEN WINGS': 1}
现在假设我只需要FOODS列的数据,在本例中,我将索引值设置为变量food\u index
以下是我尝试过的方法,问题是不同文件中的列并不总是位于同一索引位置,因此此解决方案不起作用:
from itertools import islice
with open(input_data_txt, "r") as file:
# This enables skipping the header line.
skipped = islice(file, 1, None)
for i, line in enumerate(skipped, 2):
try:
food, cals = line.split(";")
except ValueError:
pass
food_dict = {}
if food not in food_dict:
food_dict[food] = 1
else:
food_dict[food] += 1
此解决方案仅适用于此示例—但前提是我提前知道了列的位置—并且再次提醒我,我有50多列,而且我需要的列的索引位置在不同的文件中是不同的
有可能这样做吗?再说一次,只有内置的——没有熊猫、小熊猫或其他类似的软件包
使用^{} 和^{} :
这里最重要的一点是不要跳过标题行!您需要
split
那一行并找到所需列的索引!由于您知道所需信息的列标题,请将其放入参考列表中:现在,数据的顺序与现有标题相同;您可以根据需要进行匹配或重新排列
这能解决你的障碍点吗?我给你留下了很多实施方案
相关问题 更多 >
编程相关推荐