如何在python中使用分类因子变量

2024-05-15 02:52:16 发布

您现在位置:Python中文网/ 问答频道 /正文

    age     income  student     credit_rating   Class_buys_computer
0   youth   high    no  fair    no
1   youth   high    no  excellent   no
2   middle_aged     high    no  fair    yes
3   senior  medium  no  fair    yes
4   senior  low     yes     fair    yes
5   senior  low     yes     excellent   no
6   middle_aged     low     yes     excellent   yes
7   youth   medium  no  fair    no
8   youth   low     yes     fair    yes
9   senior  medium  yes     fair    yes
10  youth   medium  yes     excellent   yes
11  middle_aged     medium  no  excellent   yes
12  middle_aged     high    yes     fair    yes
13  senior  medium  no  excellent   no

我正在使用这个数据集,并且希望像ageincome等变量像factor variablesR中,我如何在python中做到这一点


Tags: nomiddleagefairstudentyeslowmedium
1条回答
网友
1楼 · 发布于 2024-05-15 02:52:16

您可以将^{}与参数category一起使用:

cols = ['age','income','student']

for col in cols:
    df[col] = df[col].astype('category')

print (df.dtypes)
age                    category
income                 category
student                category
credit_rating            object
Class_buys_computer      object
dtype: object

如果需要转换所有列:

^{pr2}$

您需要循环,因为如果使用:

df = df.astype('category')

NotImplementedError: > 1 ndim Categorical are not supported at this time

Pandas documentation about categorical。在

按注释编辑:

如果需要有序分类,请使用另一个带有^{}的解决方案:

df['age']=pd.Categorical(df['age'],categories=["youth","middle_aged","senior"],ordered=True)

print (df.age)
0           youth
1           youth
2     middle_aged
3          senior
4          senior
5          senior
6     middle_aged
7           youth
8           youth
9          senior
10          youth
11    middle_aged
12    middle_aged
13         senior
Name: age, dtype: category
Categories (3, object): [youth < middle_aged < senior]

然后可以按列age对数据帧进行排序:

df = df.sort_values('age')
print (df)
            age  income student credit_rating Class_buys_computer
0         youth    high      no          fair                  no
1         youth    high      no     excellent                  no
7         youth  medium      no          fair                  no
8         youth     low     yes          fair                 yes
10        youth  medium     yes     excellent                 yes
2   middle_aged    high      no          fair                 yes
6   middle_aged     low     yes     excellent                 yes
11  middle_aged  medium      no     excellent                 yes
12  middle_aged    high     yes          fair                 yes
3        senior  medium      no          fair                 yes
4        senior     low     yes          fair                 yes
5        senior     low     yes     excellent                  no
9        senior  medium     yes          fair                 yes
13       senior  medium      no     excellent                  no

相关问题 更多 >

    热门问题