Como criar um DataFrame de inteiros aleatórios com Pandas?

123

Eu sei que se eu usar randn,

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD'))

dá-me o que procuro, mas com elementos de uma distribuição normal. Mas e se eu quisesse apenas números inteiros aleatórios?

randintfunciona fornecendo um intervalo, mas não um array como o randnfaz. Então, como faço isso com números inteiros aleatórios entre algum intervalo?

TheRealFakeNews
fonte
E relacionado para quando estamos apenas adicionando uma coluna: Pandas: crie uma nova coluna em df com inteiros aleatórios
smci

Respostas:

183

numpy.random.randintaceita um terceiro argumento ( size), no qual você pode especificar o tamanho do array de saída. Você pode usar isso para criar seu DataFrame-

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

Aqui - np.random.randint(0,100,size=(100, 4))- cria uma matriz de saída de tamanho (100,4)com elementos inteiros aleatórios entre eles [0,100).


Demo -

import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

que produz:

     A   B   C   D
0   45  88  44  92
1   62  34   2  86
2   85  65  11  31
3   74  43  42  56
4   90  38  34  93
5    0  94  45  10
6   58  23  23  60
..  ..  ..  ..  ..
Anand S Kumar
fonte
1
Você poderia fazer uma amostra colável que inclua as importações / não tenha os números de linha?
Martin Thoma
2
Somando-se à excelente solução. Se quiser nomear as colunas com qualquer letra, exceto uma letra nessa ordem, você deve fazer df = pd.DataFrame (np.random.randint (0,100, size = (100, 4)), colunas = lista (['AA' , 'BB', 'C2', 'D2']))
mzakaria
2
@mzakaria [...]já é uma lista, então você não precisalist([...])
jtlz2
0

A maneira recomendada de criar inteiros aleatórios com NumPy atualmente é usar numpy.random.Generator.integers. ( documentação )

import numpy as np
import pandas as pd

rng = np.random.default_rng()
df = pd.DataFrame(rng.integers(0, 100, size=(100, 4)), columns=list('ABCD'))
df
----------------------
      A    B    C    D
 0   58   96   82   24
 1   21    3   35   36
 2   67   79   22   78
 3   81   65   77   94
 4   73    6   70   96
... ...  ...  ...  ...
95   76   32   28   51
96   33   68   54   77
97   76   43   57   43
98   34   64   12   57
99   81   77   32   50
100 rows × 4 columns
Webucator
fonte