行乐 发表于 2024-7-10 17:02:54

Python教程:Pandas数据转换编码的10种方式

1.构建测试数据集

import pandas as pd
import numpy as np

df = pd.DataFrame({
      'Sex': ['M','F','M','M','M','F','M','F','F','F'],
      'Course': ['English','C','Math','Python','Java','PHP','Linux','SQL','Python','C++'],
      'Score': np.random.randint(0,100,10)
      })
'''
Sex   CourseScore
0   MEnglish   22
1   F      C   20
2   M   Math   89
3   M   Python   13
4   M   Java   68
5   F      PHP   49
6   M    Linux   97
7   F      SQL      5
8   F   Python   15
9   F      C++   83
'''2.自定义函数 + 循环遍历

def myFun(x):
    if x > 90:
      return 'A'
    elif x >= 80 and x < 90:
      return 'B'
    elif x >= 70 and x < 80:
      return 'C'
    elif x >= 60 and x < 70:
      return 'D'
    else:
      return 'E'
   
df['Score_label'] = None
for i in range(len(df)):
    df.iloc = myFun(df.iloc)3.自定义函数 + map

df['Score_label_2'] = df['Score'].map(myFun)4.自定义函数 + apply

df['Score_label_3'] = df['Score'].apply(lambda x: 'A' if x > 90
else ('B' if 90 > x >= 80
      else ('C' if 80 > x >= 70
            else ('D' if 70 > x >= 60
                  else 'E'))))apply执行速度堪忧,针对大数据量尽量避免。
5.pd.cut

bins =
df['Score_label_4'] = pd.cut(df['Score'], bins)
# labels可以直接设定标签
df['Score_label_4'] = pd.cut(df['Score'], bins, labels=['E','D','C','B','A'])注意:左右开闭区间的设定。
6.sklearn二值化

from sklearn.preprocessing import Binarizer
binarizer_ = Binarizer(threshold=60)
df['Score_label_5'] = binarizer_.fit_transform(np.array(df['Score']).reshape(-1,1))7.replace替换

df['Sex_label'] = df['Sex'].replace(['M','F'], )8.value_counts()转换dict指定

利用 value_counts() 进行去重统计,转换为标签。
value_map = dict((v, i) for i, v in enumerate(df['Course'].value_counts().index))

df['Course_label'] = df.replace({'Course': value_map})['Course']

9.set + map

Map = {v: i for i, v in enumerate(set(df['Course']))}
'''
{'Math': 0,
'C': 1,
'Linux': 2,
'English': 3,
'Java': 4,
'PHP': 5,
'C++': 6,
'Python': 7,
'SQL': 8}
'''

df['Course_label_2'] = df['Course'].map(Map)10.astype转换类型

value = df['Course'].astype('category')
df['Course_label_3'] = value.cat.codes转换为:类别类型。
11.sklearn.preprocessing.LabelEncoder

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit(df['Sex'])
df['Sex_label_2'] = le.transform(df['Sex'])

le2 = LabelEncoder()
df['Course_label_4'] = le2.fit_transform(df['Course'])12.sklearn.preprocessing.OrdinalEncoder

一次性转换多个列,OrdinalEncoder 与 LabelEncoder 区别在于前者支持数组的转换,后者仅支持单独一列。
from sklearn.preprocessing import OrdinalEncoder

le3 = OrdinalEncoder()
le3.fit(df[['Sex', 'Course']])
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:725638078

df[['Sex_label_3', 'Course_label_5']] = le3.transform(df[['Sex', 'Course']])13.factorize

以上几种自动生成字典的编码方式,基本都是无序的,不固定的。
# 根据出现的顺序编码
df['Course_label_6'] = pd.factorize(df['Course'])利用 factorize 可以实现顺序编码。
结合匿名函数,可以实现对多列进行有序编码。
cat_columns = df.select_dtypes(['object']).columns

df[['Sex_label_4','Course_label_7']] = df.apply(lambda x: pd.factorize(x))
来源:https://www.cnblogs.com/djdjdj123/p/18294195
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Python教程:Pandas数据转换编码的10种方式