Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将大熊猫数据帧分块写入CSV文件_Python_Pandas_Dataframe_Export To Csv_Large Data - Fatal编程技术网

Python 将大熊猫数据帧分块写入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'

如何将大数据文件分块写入CSV文件

我有一组大数据文件(1M行x20列)。然而,我只对5列左右的数据感兴趣

我希望通过只复制感兴趣的列来简化这些文件的复制,这样我就可以使用更小的文件进行后期处理。因此,我计划将文件读入数据帧,然后写入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追加
  • 我们只在第一个块上写一个列标题

检查
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模块。