繁体   English   中英

在 csv 文件中写入大型 dataframe

[英]Writing a large dataframe in csv file

我正在尝试在 csv 文件中编写一个大型 pandas dataframe (1,00,000+ 行和 23 列)。 当我尝试这样做时,我收到一个错误 - RecursionError - 调用 Python object 时超出了最大递归深度

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

各种选项尝试如下。

选项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 我认为这里的文件保存方法将是一个更清洁的选择,但它适用于 xlsx 文件(在数据科学文章中找到该片段,但我相信该网站限制了数量您每月获得的访问次数)

第一个想法是我必须将其保留为 csv 与分块非常相似,您可以将 output 保存在 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 来避免任何 memory 问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM