Py学习  »  Python

创建一个函数来标准化分类变量(python)

Mari • 3 年前 • 1409 次点击  

我不知道说“标准化”分类变量字符串是否正确,但基本上我想创建一个函数,将以下列中的所有观察值F或F设置为0,将M或M设置为1:


> df['gender']

gender
  f
  F
  f
  M
  M
  m

我试过这个:

def padroniza_genero(x):
    if(x == 'f' or x == 'F'):
        replace(['f', 'F'], 0)
    else:
        replace(1)
        
df1['gender'] = df1['gender'].apply(padroniza_genero)

但我有个错误:

NameError: name 'replace' is not defined

有什么想法吗?谢谢

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129847
 
1409 次点击  
文章 [ 1 ]  |  最新文章 3 年前
mozway
Reply   •   1 楼
mozway    3 年前

没有 replace 在代码中定义的函数。

回到你的目标,使用向量函数。

转换到下方并映射f->0,m->1:

df['gender_num'] = df['gender'].str.lower().map({'f': 0, 'm': 1})

或者使用比较(不等于f)和从布尔值到整数的转换:

df['gender_num'] = df['gender'].str.lower().ne('f').astype(int)

输出:

  gender  gender_num
0      f           0
1      F           0
2      f           0
3      M           1
4      M           1
5      m           1

一般化

您可以使用 pandas.factorize 优点:你会得到一份真正的工作 Categorical 类型

注意。数字值的设置取决于先出现的值,或者字典顺序(如果需要) sort=True :

s, key = pd.factorize(df['gender'].str.lower(), sort=True)
df['gender_num'] = s

key = dict(enumerate(key))
# {0: 'f', 1: 'm'}