J'ai un cadre de données pandas avec 50k lignes. J'essaie d'ajouter une nouvelle colonne qui est un entier généré aléatoirement de 1 à 5.
Si je veux 50k nombres aléatoires j'utiliserais:
df1['randNumCol'] = random.sample(xrange(50000), len(df1))
mais pour cela, je ne sais pas comment le faire.
Note de côté dans R, je ferais:
sample(1:5, 50000, replace = TRUE)
Aucune suggestion?
Une solution consiste à utiliser np.random.randint
:
import numpy as np
df1['randNumCol'] = np.random.randint(1, 6, df1.shape[0])
# or if the numbers are non-consecutive (albeit slower)
df1['randNumCol'] = np.random.choice([1, 9, 20], df1.shape[0])
Afin de rendre les résultats reproductibles, vous pouvez définir la valeur de départ avec np.random.seed(42)
.
Pour ajouter une colonne d'entiers aléatoires, utilisez randint(low, high, size)
. Inutile de gaspiller de la mémoire en allouant range(low, high)
; cela pourrait représenter beaucoup de mémoire si high
est volumineux.
df1['randNumCol'] = np.random.randint(0,5, size=len(df1))
(Notez également que lorsque nous ajoutons une seule colonne, size
n’est qu’un entier. En général, si nous voulons générer un tableau/cadre de données de randint()s
, la taille peut être un tuple. , comme dans Pandas: Comment créer un cadre de données d'entiers aléatoires? )