2016-11-07 152 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