快速阅读所有csv文件并更新共享字典

时间:2018-09-07 17:59:44

标签: python pandas csv dictionary counter

我是python和pandas的新手,但这是我想要做的。 我想通读目录中的所有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 :(得分:1)

您可以通过以下方式显着优化逻辑:

  • 仅读取第一行。
  • 仅读取必需的列。
  • 从所需列的第一个值创建一个可延迟的迭代器。
  • 将结果的可迭代对象馈送到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的优点在于,无需预先指定键。另请注意,Counterdict的子类,因此您不会放弃任何功能。