使用熊猫用数字替换列值

时间:2019-12-21 03:30:05

标签: python-3.x pandas machine-learning

对于以下数据集,我可以轻松地用数字值替换第1列。

enter image description here

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

但是,如果我在一列中有3600个或更多的不同值,那么如何在不写入列值的情况下用数字值替换它。

请让我知道。我不知道该怎么做。如果有人有任何解决方案,请与我分享。

谢谢。

4 个答案:

答案 0 :(得分:0)

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

但是,如果您有很多类别,则可能需要考虑其他方式。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果要替换的值很多,则可以使用factorize

df[1] = pd.factorize(df[1])[0] + 1
print (df)
   1    2    3
0  1  0.6  0.3
1  2  0.9  1.0
2  3  5.0  0.7
3  3  4.0  8.0
4  4  7.0  2.0
5  1  1.0  4.0

答案 3 :(得分:0)

您可以做类似的事情

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