Python 将大熊猫数据帧分块写入CSV文件
如何将大数据文件分块写入CSV文件 我有一组大数据文件(1M行x20列)。然而,我只对5列左右的数据感兴趣 我希望通过只复制感兴趣的列来简化这些文件的复制,这样我就可以使用更小的文件进行后期处理。因此,我计划将文件读入数据帧,然后写入csv文件 我一直在研究如何将大块的大数据文件读入数据帧。但是,我还没有找到任何关于如何将数据以块的形式写入csv文件的信息 下面是我正在尝试的内容,但这不会附加csv文件:Python 将大熊猫数据帧分块写入CSV文件,python,pandas,dataframe,export-to-csv,large-data,Python,Pandas,Dataframe,Export To Csv,Large Data,如何将大数据文件分块写入CSV文件 我有一组大数据文件(1M行x20列)。然而,我只对5列左右的数据感兴趣 我希望通过只复制感兴趣的列来简化这些文件的复制,这样我就可以使用更小的文件进行后期处理。因此,我计划将文件读入数据帧,然后写入csv文件 我一直在研究如何将大块的大数据文件读入数据帧。但是,我还没有找到任何关于如何将数据以块的形式写入csv文件的信息 下面是我正在尝试的内容,但这不会附加csv文件: with open(os.path.join(folder, filename), 'r'
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']])
解决方案:
header = True
for chunk in chunks:
chunk.to_csv(os.path.join(folder, new_folder, "new_file_" + filename),
header=header, cols=[['TIME','STUFF']], mode='a')
header = False
注:
告诉pandas追加mode='a'
- 我们只在第一个块上写一个列标题
to_csv
方法中的chunksize
参数。这些是文件
写入文件的过程如下所示:
df.to_csv("path/to/save/file.csv", chunksize=1000, cols=['TIME','STUFF'])
你为什么不只阅读感兴趣的栏目然后保存呢
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)
嗯,使用您提出的方法,我遇到了以下错误:AttributeError:'TextFileReader'对象没有属性'to_csv'您的答案仍然假设我正在分块读取“df”?这是一个完整的数据帧。这在将巨大的数据帧从一个文件流到另一个文件时没有帮助,在这种情况下,mode='a'更好。您错过了os.path.join的要点:
os.path.join(文件夹、新文件夹、“新文件”+文件名)
谢谢您的关注!我注意到,当我使用mode='a'附加时,列标签写在每个块之后。如何确保列标签只出现在文件的开头?您可以将header=None传递给所有人,但可以为I执行的第一个chunk除外,chunk in chunk:,然后是header=(I==0)
,以防我遇到太大的文件,以至于我不得不作为chunk读入。我不相信你的代码会允许我这么做,对吗?对,但它仍然更有效。如果是这种情况,您仍然需要区块或使用csv模块。