如何读取和提取并合并多个巨大的csv(1G~)?

时间:2017-01-23 14:06:56

标签: python csv pandas merge

我有多个巨大的csv(1GB~),如下所示

path = 'C:/Users/csvfiles'

sample1.csv

A B C
0 a A
0 c C
1 d D

sample2.csv

A B C
1 e E
0 f G
0 g G

我想得到以下df

A B C
1 d D
1 e E

我想为columnA提取1。 它可能变得容易处理(考虑到内存大小)。

在我看来,我应该使用chunksize并处理一些提取然后合并...(以节省内存大小)

这对我来说非常复杂。

我可以问一下如何读取和合并巨大的csv?(以及如何节省内存)

2 个答案:

答案 0 :(得分:1)

  • 使用glob抓取文件
  • 使用pd.concat将它们组合在一起
  • 使用query获取列A1
  • 的位置

代码

pd.concat(
    [pd.read_csv(f) for f in glob('csvs/*')]).query('A == 1')

   A  B  C
2  1  d  D
0  1  e  E

,如果您想在索引的第一级跟踪每一行的来源。

pd.concat(
    {i: pd.read_csv(f) for i, f in enumerate(glob('csvs/*'))}).query('A == 1')

     A  B  C
0 2  1  d  D
1 0  1  e  E

答案 1 :(得分:0)

重要的问题是修改数据帧很慢。 如果您有许多文件(您可能需要进行实验),更好的方法是将结果聚合在一个列表中,并最终转换为数据框

l = []
while df in generate_df():
    l += df[df.A==1].to_dict('records')
big_df = pandas.DateFrame(l)