python - 将 10000 个循环中的 1000 个数据帧以 100 个为一组连接到一个大数据帧并保存到 csv/txt 文件
问题描述
我正在构建股票和如此大的数据框。我正在对 1000 个建筑物的 10000 个库存进行输入参数采样(因此,如果每个建筑物都是 csv 文件中的 1 行,则写入 csv 文件大约需要 10000000 行)。为了执行此操作(在 Python 中不会出现 MemoryError)并为模拟程序准备文件,我需要将这些股票组合成更小的部分(而不是一个大文件),例如一次 100 只股票 1000 只。知道怎么做吗?
我准备了一个小例子,其中我有一个原始数据框,我在循环中覆盖了一个列。最后,我将所有数据帧(在循环中生成)堆叠到一个大数据帧中(其中包含原始数据帧的 x 倍,并在此处和那里进行更改。而不是将所有内容堆叠到一个大 df 并将其保存到 csv,我想一次将它们堆叠 100 只股票。
现在,我将所有库存堆叠在一个大 df 中,然后将其拆分为带有额外“ID”列的部分。有没有办法在这个过程中做到这一点(想象我需要总共需要 1000 或 100000 只股票)?计算并堆叠 100 只股票 -> 将它们保存到 csv -> 计算并堆叠接下来的 100 只股票 -> 将它们保存到 csv ...
试过的代码:
import pandas as pd
df_or = pd.DataFrame({"Case": [1,2,3,4,5,6],
"A": [3,5,2,8,4,1],
"B": [10,12,24,8,57,84]})
print(df_or)
total = []
for i in range(0,1000):
df = df_or.copy()
df.loc[:, 'A'] = df_or.loc[:, 'A'].mul(i)
df.loc[:, 'ID'] = df.loc[:,'Case'] + i*100000
print(df)
total.append(df)
total = pd.concat(total)
total = total.sort_values('ID')
for i in range(0, 10):
stocks = total[((i) * 100 * 100000 <= total['ID']) & (total['ID'] <= (i + 1) * 100 * 100000)]
stocks.to_csv('stack100_' + str(i) + '.csv', sep=',', index=False)
解决方案
您可以以附加模式打开文件,然后将文件写入其中。
import pandas as pd
df = pd.read_csv("abalone.csv")
with open("output.csv", 'a') as outf:
df.to_csv(outf)
这样,您可以一次读取每个文件,汇总并保存到文件中。一次只有一个文件在内存中。
如果您以后只批量分析文件,我建议您考虑在此步骤中将这些文件保存到这些批次中,这样您的文件就更易于管理。
推荐阅读
- jquery - 在无限数量的图像之间淡入淡出
- python - 即使返回的字符串似乎与断言的字符串相同,断言语句也会返回 False
- python - 如何模仿 .join() 之类的“变量名”类?
- java - 当main方法中没有创建类的实例时,会调用默认构造函数吗?
- c# - 超过一定大小的文件在 Swashbuckle.Swagger 端点中返回 404 并带有 IOperationFilter 文件上传
- java - WorkManager OneTimeWorkRequest 在实际执行之前有很长的延迟
- php - 无法同时从一个表单提交文本输入和文件输入
- sql - 如何在 SQL 中添加包含 ZScore 的新列
- c# - 多步 OLE DB 操作产生错误。C#/MS 访问
- tfs - TFS 过滤工作项默认的产品积压如何?