首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将10000个循环数据从100组连接到一个大数据帧,并保存到csv/txt-文件中。

将10000个循环数据从100组连接到一个大数据帧,并保存到csv/txt-文件中。
EN

Stack Overflow用户
提问于 2020-08-31 09:35:45
回答 2查看 163关注 0票数 0

我的工作是建造库存和这么大的数据仓库。我正在对1000个建筑中的10000个库存进行输入参数抽样(因此,如果每个建筑都是csv文件中的一行,那么写到csv文件的代码大约是10000000行)。为了执行此操作(而不是在Python中获取MemoryError )并为模拟程序准备文件,我将需要将这些股票组合成较小的部分(而不是一个大文件),例如每次100股1000股。知道怎么做吗?

我准备了一个小示例,其中我有一个原始的dataframe,在这个示例中,我覆盖了一个循环中的列。最后,我将所有数据(在循环中生成)堆叠到一个大的dataframe中(然后包含x倍于原始数据的x倍,这里和那里都有更改)。我不想把所有的东西堆放在一个大df中,并将其保存到csv中,我想一次把它们堆成100只股票。

现在我把所有的股票堆放在一个大df里,然后用一个额外的‘ID’列把它分成几个部分。在这个过程中是否有办法做到这一点(假设我总共需要1000或100000股)?计算和堆叠100股->将它们保存到csv ->计算和堆叠下100只股票->将它们保存到csv .

试用代码:

代码语言:javascript
复制
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)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-31 09:45:20

如果需要编写的文件少于1000个,则可以同时打开所有文件;在获取数据时,将每行写入相应的文件。

您需要将打开的文件保存在字典或类似的文件中,这样您就可以将每一行写到正确的文件中,以便在结束时将它们全部关闭。

类似于:

代码语言:javascript
复制
from contextlib import ExitStack
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]})

with ExitStack() as stack:

    files = [
        stack.enter_context(open('stack100_' + str(j) + '.csv', 'w'))
        for j in range(0, 10)
    ]

    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

        for j in range(0, 10):
            stocks = df[(
                (j) * 100 * 100000
                <= total['ID']) & (total['ID']
                <= (j + 1) * 100 * 100000
            )]
            stocks.to_csv(files[j], sep=',', index=False)

        del stocks, df
票数 1
EN

Stack Overflow用户

发布于 2020-08-31 09:40:02

您可以以附加模式打开文件,并将文件写入其中。

代码语言:javascript
复制
import pandas as pd

df = pd.read_csv("abalone.csv")

with open("output.csv", 'a') as outf:
    df.to_csv(outf)

这样,您就可以一次读取每个文件,聚合并保存到一个文件中。一次内存中只有一个文件。

如果以后只对文件进行批分析,我建议您考虑在这一步将文件保存到这些批处理中,这样您的文件就更易于管理了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63668322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档