Для следующего набора данных я могу легко заменить столбец 1 числовым значением.

enter image description here

df['1'].replace(['A', 'B', 'C', 'D'], [0, 1, 2, 3], inplace=True)

Но если у меня есть 3600 или больше, чем другие значения в столбце, как я могу заменить его числовыми значениями без записи значения столбца.

Пожалуйста, дайте мне знать. Я не понимаю, как это сделать. Если у кого-нибудь есть решение, пожалуйста, поделитесь со мной.

Заранее спасибо.

-1
Nafisa Anjum Samia 21 Дек 2019 в 06:30

3 ответа

import pandas as pd
df = pd.DataFrame({1:['A','B','C','C','D','A'],
                 2:[0.6,0.9,5,4,7,1,],
                 3:[0.3,1,0.7,8,2,4]})
print(df)
   1    2    3
0  A  0.6  0.3
1  B  0.9  1.0
2  C  5.0  0.7
3  C  4.0  8.0
4  D  7.0  2.0
5  A  1.0  4.0

np.where это легко.

import numpy as np

df[1] =  np.where(df[1]=="A", "0", 
                np.where(df[1]=="B", "1",
                        np.where(df[1]=="C","2",
                                np.where(df[1]=="D","3",np.nan))))
print(df)
   1    2    3
0  0  0.6  0.3
1  1  0.9  1.0
2  2  5.0  0.7
3  2  4.0  8.0
4  3  7.0  2.0
5  0  1.0  4.0

Но если у вас много категорий, вы можете подумать о других способах.

0
yganalyst 21 Дек 2019 в 08:21
import string
upper=list(string.ascii_uppercase)
a=pd.DataFrame({'Alp':upper})
print(a)
   Alp
0    A
1    B
2    C
3    D
4    E
5    F
6    G
7    H
8    I
9    J
  .
  .
19   T
20   U
21   V
22   W
23   X
24   Y
25   Z


for k in np.arange(0,26):
    a=a.replace(to_replace =upper[k],value =k) 
print(a)

  Alp
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
  .
  .
  .
21  21
22  22
23  23
24  24
25  25
0
Imran_Say 21 Дек 2019 в 13:24

Вы могли бы сделать что-то вроде

df.loc[df['1'] == 'A','1'] = 0
df.loc[df['1'] == 'B','1'] = 1

### Or

keys = df['1'].unique().tolist()
i = 0
for key in keys
    df.loc[df['1'] == key,'1'] = i
    i = i+1

0
Manuel 22 Дек 2019 в 21:24