在 csv 文件中写入大型数据帧

问题描述

我正在尝试在 csv 文件中编写一个大的 Pandas 数据框(1,00,000+ 行和 23 列)。当我尝试这样做时,出现错误 - RecursionError - 调用 Python 对象时超出最大递归深度

我尝试了多个建议的选项,即使用块大小、拆分列表等,但似乎都没有工作。有人可以帮忙吗?

尝试了以下各种选项。

选项 1:

x_df.to_csv(r"C:\file.csv",index=False,header=False)

选项 2:

MyList = []
MyList =my x_df.values.tolist()
for i in range(0,len(MyList),Chunksize):
    x = []
    x = MyList[i:i+Chunksize]
    with open(r'filename.csv',mode='a',newline='',encoding='utf-8') as myfile:
       wr = csv.writer(myfile)
       wr.writerows(x)

选项 3:

MyList = []
MyList =my x_df.values.tolist()
filename = (r"C:\file.csv")
import csv
file = open(filename,'w+',newline = "")
with file:
   write = csv.writer(file)
   write.writerows(MyList)

提前致谢。

解决方法

处理大型 csv 文件可能会很痛苦,我认为有几个选项可能仍然适用于您的情况。

如果你不是绝对需要它是一个 csv,我认为文件保存方法 here 将是一个更干净的选择,但它用于 xlsx 文件(在数据科学{{3 }},但我相信该网站会限制您每月获得的访问次数)

我必须将它保留为 csv 的第一个想法与分块非常相似,您可以以足够小的块输出一个包含 csv 文件的文件夹,以避免该错误。从那里您可以使用常规 python 文件编写器重新组合文件。我认为这看起来像这样:

MyList = []
MyList =my x_df.values.tolist()
for i in range(0,len(MyList),Chunksize):
    x = []
    x = MyList[i:i+Chunksize]
    with open(f'my_folder/filename{i}-{i+Chunksize}.csv',mode='a',newline='',encoding='utf-8') as myfile:
       wr = csv.writer(myfile)
       wr.writerows(x)

# Then recombine the files
big_csv = ''
for fname in os.listdir('my_folder'):
    with open(f'my_folder/{fname}') as f:
        # Newline might not be necessary/pay attention to whatever your linedelimiters are
        big_csv += f.read() + '\n'

with open('filename.csv') as f:
    f.write(big_csv)

可能有更好的方法来做到这一点,但使用字符串而不是 csv 来避免任何内存问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...