¿Cómo crear un DataFrame de enteros aleatorios con Pandas?

123

Sé que si yo uso randn,

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

me da lo que busco, pero con elementos de una distribución normal. Pero, ¿y si solo quisiera números enteros aleatorios?

randintfunciona proporcionando un rango, pero no una matriz como lo randnhace. Entonces, ¿cómo hago esto con números enteros aleatorios entre algún rango?

TheRealFakeNews
fuente
Y relacionado para cuando solo estamos agregando una columna: Pandas: crea una nueva columna en df con enteros aleatorios
smci

Respuestas:

183

numpy.random.randintacepta un tercer argumento ( size), en el que puede especificar el tamaño de la matriz de salida. Puede usar esto para crear su DataFrame-

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

Aquí - np.random.randint(0,100,size=(100, 4))- crea una matriz de salida de tamaño (100,4)con elementos enteros aleatorios entre ellos [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 produce:

     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
fuente
1
¿Podría hacer una muestra copiable que incluya las importaciones / no tenga los números de línea?
Martin Thoma
2
Añadiendo a la excelente solución. Si desea nombrar las columnas con cualquier nombre menos una letra en ese orden, debe hacer df = pd.DataFrame (np.random.randint (0,100, size = (100, 4)), columnas = list (['AA' , 'BB', 'C2', 'D2']))
mzakaria
2
@mzakaria [...]ya es una lista, por lo que no es necesariolist([...])
jtlz2
0

La forma recomendada de crear números enteros aleatorios con NumPy en estos días es usar numpy.random.Generator.integers. ( documentación )

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
fuente