我有几个数据帧,从中我创建了一个笛卡尔产品(有意!)
之后,我将结果导出到磁盘
我相信生成的数据帧的大小可能会超过我的内存占用,所以我想知道是否有一种方法可以将其分块,这样数据帧就不需要同时在内存中了
示例代码:
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)
您可以尝试使用
itertools.product
建立单独的行。在您的示例中,您可以按如下方式执行此操作:然后,您可以获取大量行,并使用
df.to_csv("file", mode="a")
相关问题 更多 >
编程相关推荐