创建笛卡尔积数据帧而不使用最大内存

2024-04-29 12:07:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个数据帧,从中我创建了一个笛卡尔产品(有意!)

之后,我将结果导出到磁盘

我相信生成的数据帧的大小可能会超过我的内存占用,所以我想知道是否有一种方法可以将其分块,这样数据帧就不需要同时在内存中了

示例代码:

import pandas as pd

def create_list_from_range(r1,r2): 
    if (r1 == r2): 
        return r1 
    else: 
        res = [] 
        while(r1 < r2+1 ): 
            res.append(r1) 
            r1 += 1
        return res

# make a list of options
color_opt = ['red','blue','green','orange']
dow_opt = create_list_from_range(1,7)
hod_opt = create_list_from_range(0,23)

# turn each list into a dataframe
df_color = pd.DataFrame({'color': color_opt})
df_day = pd.DataFrame({'day_of_week': dow_opt})
df_hour = pd.DataFrame({'hour_of_day': hod_opt})

# add a dummy columns to everything so I can easily do a cartesian product
df_color['dummy']=1
df_day['dummy']=1
df_hour['dummy']=1

# now cartesian product... cascading
merge1 = pd.merge(df_day, df_hour, on='dummy')
FINAL = pd.merge(merge1, df_color, on='dummy')

FINAL.to_csv('FINAL_OUTPUT.csv', index=False)

Tags: 数据fromdfcreaterangereslistdummy
1条回答
网友
1楼 · 发布于 2024-04-29 12:07:00

您可以尝试使用itertools.product建立单独的行。在您的示例中,您可以按如下方式执行此操作:

from itertools import product

prod = product(color_opt, dow_opt, hod_opt)

然后,您可以获取大量行,并使用 df.to_csv("file", mode="a")

相关问题 更多 >