Быстро читать все CSV-файлы и обновлять общий словарь - PullRequest
0 голосов
/ 07 сентября 2018

Я новичок в питоне и пандах, но вот что я хочу сделать. Я хочу прочитать все CSV-файлы в каталоге и получить одну ячейку данных из файла и обновить счетчик в словаре, при этом значение извлечения является ключом в словаре. Я должен сделать это для ~ 6000 CSV-файлов. Как я могу сделать это быстро?

stats = {'A':0, 'B':0, 'C':0, 'D':0}
for file in f:
    df = pandas.read_csv(file)
    type = df["type"].head(1)[0]
    stats[type]+=1

Порядок, в котором я читаю файлы, не имеет значения. Я надеялся сделать это одновременно, поделившись словарем. Если нет лучшего подхода к тому, чего я пытаюсь достичь.

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете значительно оптимизировать свою логику с помощью:

  • Чтение только первого ряда.
  • Чтение только необходимого столбца.
  • Создание отложенной итерации из первого значения нужного столбца.
  • Подача получаемой итерации до collections.Counter.

Вот код, который должен помочь:

from collections import Counter
import pandas as pd

res = Counter(pd.read_csv(file, nrows=1, columns=['type'])['type'].iloc[0] \
              for file in f)

Прелесть Counter в том, что нет необходимости указывать ключи заранее. Также обратите внимание, что Counter является подклассом dict, поэтому вы не отказываетесь от какой-либо функциональности.

...