【发布时间】:2019-01-21 23:34:14
【问题描述】:
我想在 python 中生成一个具有以下规范的文件:
第 1 列:Sno 第 2 列:应随机分配为数字 1-10 Column 3-Column4:应该是长度为1-32的随机字符
我希望此文件大小超过 1 GB。我目前正在使用此代码:
import pandas as pd
import numpy as np
import random
import string
from random import choices
from string import ascii_lowercase
df = pd.DataFrame(np.random.randint(low=0, high=10, size=(50000000,1)),
columns=['integer1'])
df['String1']= ["".join(choices(ascii_lowercase, k=random.randint(1,32))) for _ in range(50000000)]
df['String2']= ["".join(choices(ascii_lowercase, k=random.randint(1,32))) for _ in range(50000000)]
但是这段代码真的很慢,而且要花很多时间。有没有更有效的方法?
考虑到字符串列,我还找到了元音数量最多的行。
另外,有没有办法不生成 5000 万(如代码中所示的行)但仍使大小达到 1 GB,类似于“反压缩”。
谢谢
【问题讨论】:
-
id_generator是干什么用的? -
哎呀对不起,那是多余的。我会删除它。
-
你为什么要制作一个巨大的文件?
-
更有效的方法是不在 Python 中进行。 1. numpy虽然快,但桥接很慢,每次碰弦都要桥接。 2.numpy依靠批量做事,减少需要桥接的次数;所以检查你需要多少物品是行不通的。在 C 中这将是微不足道的(而且很快):生成每一行,将其长度添加到总和,打印出来,如果总和超过 1G,则中断循环。
-
@roganjosh:你说得对,我没注意。更糟糕的是——最后两列都是用 Python 编写的。最后两行构造了 50000000 个列表对象,每个大约 825000000 个 int 对象和 50000000 个字符串对象。那是 1850000000 个对象实例化。
标签: python pandas numpy memory size