仅使用Python内置,是否可以只读入一组指定的列以添加到Python字典中?

仅使用Python内置,是否可以只读入一组指定的列以添加到Python字典中?,python,dictionary,built-in,Python,Dictionary,Built In,我有一个列的标题名,来自一系列包含50多个字段的海量csv文件。在所有文件中,我需要的列的索引并不总是相同的 我编写了在每个文件中查找列的索引号的代码。现在,我只想将此列添加为字典中的键,该值统计此列中唯一字符串的数量 因为这些csv文件非常庞大,我正试图使用最佳实践来实现高效的数据工程,所以我正在寻找一种使用最少内存的解决方案。我找到的每个将csv写入字典的解决方案都涉及将csv中的所有数据写入字典,我认为这是没有必要的。似乎最好的解决方案只需要从这一列中读入数据,然后将这一列添加到字典键中

我有一个列的标题名,来自一系列包含50多个字段的海量csv文件。在所有文件中,我需要的列的索引并不总是相同的

我编写了在每个文件中查找列的索引号的代码。现在,我只想将此列添加为字典中的键,该值统计此列中唯一字符串的数量

因为这些csv文件非常庞大,我正试图使用最佳实践来实现高效的数据工程,所以我正在寻找一种使用最少内存的解决方案。我找到的每个将csv写入字典的解决方案都涉及将csv中的所有数据写入字典,我认为这是没有必要的。似乎最好的解决方案只需要从这一列中读入数据,然后将这一列添加到字典键中

那么,让我们将此作为示例数据:

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_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列,并且我需要的列的索引位置在不同的文件中是不同的

有可能这样做吗?同样,仅限内置——无Pandas或Numpy或其他此类软件包。

使用和:


这里重要的一点是不要跳过标题行!您需要拆分该行,并找到所需列的索引!由于您知道所需信息的列标题,请将其放入参考列表:

wanted_headers = ["FOODS", "RECYCLING"]

with open(input_data_txt, "r") as infile:
    header = infile.read().split(';')
    wanted_cols = [header.index(label) for label in wanted_headers if label in header]
    # wanted_cols is now a list of column numbers you want

    for line in infile.readlines():    # Iterate through remaining file
        fields = line.split(';')
        data = [fields[col] for col in wanted_cols]
现在,数据的顺序与现有标题相同;您可以根据需要对其进行匹配或重新排列


这能解决你的障碍点吗?我为您留下了大量的实现…

谢谢,但这并不能解决我的阻塞点。正如我在最初的问题中所写的那样,我已经编写了从标题名中查找我的列的列值的代码。我要寻找的帮助是下一步:从我识别的csv列值将csv数据添加到字典中。
wanted_headers = ["FOODS", "RECYCLING"]

with open(input_data_txt, "r") as infile:
    header = infile.read().split(';')
    wanted_cols = [header.index(label) for label in wanted_headers if label in header]
    # wanted_cols is now a list of column numbers you want

    for line in infile.readlines():    # Iterate through remaining file
        fields = line.split(';')
        data = [fields[col] for col in wanted_cols]