2016-11-07 120 views
3

我想创造100万把一串钥匙与200个不同的值:产生大熊猫随机字符串

N = 1000000 
uniques_keys = [pd.core.common.rands(3) for i in range(200)] 
keys = [random.choice(uniques_keys) for i in range(N)] 

不过,我得到以下错误

In [250]:import pandas as pd 

In [251]:pd.core.common.rands(3) 
Traceback (most recent call last): 

    File "<ipython-input-251-31d12e0a07e7>", line 1, in <module> 
    pd.core.common.rands(3) 

AttributeError: module 'pandas.core.common' has no attribute 'rands' 

我用熊猫版0.18 0.0。

+1

你到底想达到什么目的? – IanS

+0

创建一个包含200个不同值的100万个密钥的字符串:N = 1000000 uniques_keys = [pd.core.common.rands(3)for i in range(200)] keys = [random.choice(uniques_keys)for i在范围内(N)] – clh2007

回答

3

有几种解决方案:

解决方案一:

功能rands似乎是pandas.util.testing现在:

pd.util.testing.rands(3) 

解决方法二:

直走为底层numpy实现(如找到in the pandas source code):

import string 
RANDS_CHARS = np.array(list(string.ascii_letters + string.digits), 
         dtype=(np.str_, 1)) 

nchars = 3 
''.join(np.random.choice(RANDS_CHARS, nchars)) 

解决方案三:

呼叫numpy.random.bytes(检查它是否符合你的要求)。

方案四:

其他建议见this question

2

您可以使用:

In [14]: pd.util.testing.rands_array? 
Signature: pd.util.testing.rands_array(nchars, size, dtype='O') 
Docstring: Generate an array of byte strings. 

演示:

In [15]: N = 1000000 

In [16]: s_arr = pd.util.testing.rands_array(10, N) 

In [17]: s_arr 
Out[17]: array(['L6d2GwhHdT', '5oki5T8VYm', 'XKUblAUFyL', ..., 'BE5AdCa62a', 'X3zDFKj6iy', 'iwASB9xZV3'], dtype=object) 

In [18]: len(s_arr) 
Out[18]: 1000000