问题描述
我正在尝试在 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 来避免任何内存问题。