2016-07-22 134 views
3

我有一组大数据文件(1M行x 20列)。但是,这些数据中只有5列是我感兴趣的。将熊猫数据框写入csv文件块

我想通过仅创建感兴趣的列创建这些文件的副本,我可以让事情变得更加简单,因此我可以使用较小的文件进行后期处理。

我的计划是将文件读入数据框然后写入csv文件。

我一直在研究大块数据文件读取到一个数据框。

但是,我一直无法找到任何关于如何将数据写入一个csv文件的块。

这里是我尝试了,但是这并不追加csv文件:

with open(os.path.join(folder, filename), 'r') as src: 
    df = pd.read_csv(src, sep='\t',skiprows=(0,1,2),header=(0), chunksize=1000) 
    for chunk in df: 
     chunk.to_csv(os.path.join(folder, new_folder, 
            "new_file_" + filename), 
            columns = [['TIME','STUFF']]) 

回答

6

尝试:

chunk.to_csv(os.path.join(folder, new_folder, "new_file_" + filename), cols = [['TIME','STUFF']], mode='a') 

mode='a'告诉大熊猫追加。

+5

你错过os.path.join点:'os.path.join(文件夹,new_folder, “new_file_” +文件名)' – Alexander

+0

感谢没收! –

+0

我注意到,当我使用mode ='a'追加时,列标签会在每个块后写入。如何确保列标签只出现在文件的开头? – user1964692

6

检查to_csv方法中的chunksize参数。 Here是文档。

写入文件看起来像:

df.to_csv("path/to/save/file.csv", chunksize=1000, cols=['TIME','STUFF']) 
+0

嗯我得到了以下错误使用你提出的方法:AttributeError:'TextFileReader'对象没有属性'to_csv' 你的答案仍然假设我正在阅读“ df“大块? – user1964692

+0

这是一个完整的DataFrame。 – Alex

+0

当从一个文件传输巨型数据帧到另一个文件时,这没有帮助,在这种情况下,mode ='a'更好。 – denfromufa

0

你为什么不只读感兴趣的列,然后保存呢?

file_in = os.path.join(folder, filename) 
file_out = os.path.join(folder, new_folder, 'new_file' + filename) 

df = pd.read_csv(file_in, sep='\t', skiprows=(0, 1, 2), header=0, names=['TIME', 'STUFF']) 
df.to_csv(file_out) 
+0

以防万一我遇到的文件太大,我不得不作为块阅读。我不相信你的代码会让我这么做,对吗? – user1964692

+0

正确,但效率更高。如果是这样的话,你仍然需要chunk或者使用csv模块。 – Alexander