Saya mencoba mengisi kolom kerangka data dengan karakter string acak - tetapi menggunakan kode di bawah ini saya mendapatkan string 10 karakter baru setiap kali saya menjalankannya - tetapi itu sama untuk setiap baris.

Bagaimana cara menghasilkan string baru untuk setiap baris?

print(df)

0          eqFSwEJQqD
1          eqFSwEJQqD
2          eqFSwEJQqD
3          eqFSwEJQqD
4          eqFSwEJQqD
              ...    
1019920    eqFSwEJQqD
1019921    eqFSwEJQqD
1019922    eqFSwEJQqD
1019923    eqFSwEJQqD
1019924    eqFSwEJQqD

Saya ingin, misalnya:

0 fGtryghjuYt
1 jUiKlOpYtrd

Dll...

Kode:

import random
from string import ascii_letters

df['ff'] = ''.join(random.choice(ascii_letters) for x in range(10))
0
Sylv99 1 Oktober 2021, 12:29

2 jawaban

Jawaban Terbaik

Menggunakan:

df['ff'] = [''.join(random.choice(ascii_letters) for x in range(10)) for _ in range(len(df))]
print(df)

Seperti pada contoh di bawah ini:

import random
from string import ascii_letters
import pandas as pd

df = pd.DataFrame(data=list(range(10)), columns=["id"])
df['ff'] = [''.join(random.choice(ascii_letters) for x in range(10)) for _ in range(len(df))]
print(df)

Keluaran

   id          ff
0   0  UKCYsUXRYi
1   1  vvYweriLfb
2   2  eYcCCnXfhW
3   3  xiyPisioWt
4   4  cjMOxAcULS
5   5  lgkxtFCbBx
6   6  pPeEOmfgkB
7   7  EBhBfticnM
8   8  hdQxePBmCq
9   9  KCPosrHfgz

Masalah dengan pendekatan Anda adalah ia menciptakan nilai tunggal yang unik dan menggunakannya untuk menetapkannya ke seluruh kolom 'ff'

1
Dani Mesejo 1 Oktober 2021, 09:32

Menggunakan:

df['ff'] = df['col'].apply(''.join(random.choice(ascii_letters) for x in range(10)))

Atau:

df['ff'] = [''.join(random.choice(ascii_letters) for x in range(10)) for _ in df.index]

Atau:

from string import ascii_letters
a = np.random.choice(list(ascii_letters), size=(10, len(df)))
df['ff'] = np.apply_along_axis(''.join, 0, a)
1
jezrael 1 Oktober 2021, 09:43