Как создать DataFrame из случайных целых чисел с помощью Pandas?


124

Я знаю, что если я использую randn,

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

дает мне то, что я ищу, но с элементами нормального распределения. Но что, если мне просто нужны случайные целые числа?

randintработает, предоставляя диапазон, но не массив, как это randnделает. Итак, как мне сделать это со случайными целыми числами в некотором диапазоне?


И это связано с тем, когда мы просто добавляем столбец: Pandas: создать новый столбец в df со случайными целыми числами
smci

Ответы:


185

numpy.random.randintпринимает третий аргумент ( size), в котором вы можете указать размер выходного массива. Вы можете использовать это для создания своего DataFrame-

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

Здесь - np.random.randint(0,100,size=(100, 4))- создает выходной массив размера (100,4)со случайными целыми элементами между ними [0,100).


Демо -

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

который производит:

     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
..  ..  ..  ..  ..

1
Не могли бы вы сделать копируемый образец, который включает импорт / не имеет номеров строк?
Мартин Тома

2
Добавление к отличному решению. Если вы хотите присвоить столбцам любое имя, кроме буквы в указанном порядке, вы должны сделать df = pd.DataFrame (np.random.randint (0,100, size = (100, 4)), columns = list (['AA' , 'BB', 'C2', 'D2']))
mzakaria

2
@mzakaria [...]- это уже список, поэтому вам не нужноlist([...])
jtlz2

1

В наши дни рекомендуемый способ создания случайных целых чисел с помощью NumPy - использовать numpy.random.Generator.integers. ( документация )

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.