Bagaimana cara membuat DataFrame dari bilangan bulat acak dengan Pandas?

123

Saya tahu bahwa jika saya menggunakan randn,

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

memberi saya apa yang saya cari, tetapi dengan elemen dari distribusi normal. Tetapi bagaimana jika saya hanya ingin bilangan bulat acak?

randintbekerja dengan menyediakan rentang, tetapi tidak seperti larik randn. Jadi bagaimana cara melakukan ini dengan bilangan bulat acak antara beberapa rentang?

TheRealFakeNews
sumber
Dan terkait ketika kita baru saja menambahkan kolom: Pandas: buat kolom baru di df dengan bilangan bulat acak
smci

Jawaban:

183

numpy.random.randintmenerima argumen ketiga ( size), di mana Anda bisa menentukan ukuran larik keluaran. Anda dapat menggunakan ini untuk membuat DataFrame-

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

Di sini - np.random.randint(0,100,size=(100, 4))- membuat larik keluaran berukuran (100,4)dengan elemen bilangan bulat acak di antaranya [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'))

yang menghasilkan:

     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
sumber
1
Bisakah Anda membuat sampel copy-paste yang menyertakan impor / tidak memiliki nomor baris?
Martin Thoma
2
Menambah solusi terbaik. Jika Anda ingin memberi nama kolom apa pun kecuali huruf dalam urutan itu, Anda harus melakukan df = pd.DataFrame (np.random.randint (0,100, size = (100, 4)), kolom = daftar (['AA' , 'BB', 'C2', 'D2']))
mzakaria
2
@mzakaria [...]sudah ada di daftar jadi Anda tidak perlulist([...])
jtlz2
0

Cara yang disarankan untuk membuat bilangan bulat acak dengan NumPy saat ini adalah dengan menggunakan numpy.random.Generator.integers. ( dokumentasi )

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
sumber