将大型 Pandas 数据帧分块写入 CSV 文件
Writing large Pandas Dataframes to CSV file in chunks
如何将大型数据文件分块写入 CSV 文件?
我有一组大型数据文件(100 万行 x 20 列)。但是,我对数据文件只有 5 列左右感兴趣。
我想通过仅使用感兴趣的列制作这些文件的副本来使事情变得更容易,这样我就可以使用较小的文件来进行 post 处理。所以我打算将文件读入数据框,然后写入 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']])
解决方案:
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
备注:
mode='a'
告诉 pandas 添加。
- 我们只在第一个块上写一列 header。
检查 to_csv
方法中的 chunksize
参数。 Here 是文档。
写入文件看起来像:
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)
如何将大型数据文件分块写入 CSV 文件?
我有一组大型数据文件(100 万行 x 20 列)。但是,我对数据文件只有 5 列左右感兴趣。
我想通过仅使用感兴趣的列制作这些文件的副本来使事情变得更容易,这样我就可以使用较小的文件来进行 post 处理。所以我打算将文件读入数据框,然后写入 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']])
解决方案:
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
备注:
mode='a'
告诉 pandas 添加。- 我们只在第一个块上写一列 header。
检查 to_csv
方法中的 chunksize
参数。 Here 是文档。
写入文件看起来像:
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)