Как эффективно сортировать значения из файла CSV в несколько списков? - PullRequest
0 голосов
/ 23 октября 2019

У меня очень большой CSV-файл со следующей структурой:

category,value
A,1
A,4
B,2
A,1
B,3
...

Мне нужны два списка. Первый список содержит все значения из категории A, список секунд содержит все значения из категории B.

Рабочее решение:

import csv

list_a = []
list_b = []

with open('my_file.csv', mode='r') as f:
    reader = csv.DictReader(f)

    for line in reader:
        if line['category'] == 'A':
            list_a.append(line['value'])
        if line['category'] == 'B':
            list_b.append(line['value'])

Поскольку файл CSV очень большойЯ бы хотел избежать дорогих звонков append. Есть ли более эффективный способ?

Ответы [ 2 ]

2 голосов
/ 23 октября 2019
import pandas as pd
df = pd.read_csv('my_file.csv')
list_a = df.loc[df['category']=='A', 'value'].values.tolist()
list_b = df.loc[df['category']=='B', 'value'].values.tolist()
0 голосов
/ 23 октября 2019

Я бы предложил применить collections.defaultdict в вашем случае.
Хотя это подразумевает один вызов .append (накапливая списки для каждой категории), он был бы очень удобным контейнером в потенциальных случаях, когда их может быть больше 2категории. Диктовка позволит вам сохранить значения для любого количества категорий:

from collections import defaultdict
import csv

with open('file.csv') as f:
    reader = csv.DictReader(f)
    category_dict = defaultdict(list)

    for line in reader:
        category_dict[line['category']].append(line['value'])

Пример вывода:

print(category_dict['A'])   # ['1', '4', '1']
print(category_dict['B'])   # ['2', '3']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...