首页 > Python资料 博客日记
Python教程:Pandas数据转换编码的10种方式
2024-07-10 16:00:05Python资料围观62次
文章Python教程:Pandas数据转换编码的10种方式分享给大家,欢迎收藏Python资料网,专注分享技术知识
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 Course Score
0 M English 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[i, 3] = myFun(df.iloc[i, 2])
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 = [0, 59, 70, 80, 90, 100]
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'], [0,1])
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'])[0]
利用 factorize 可以实现顺序编码。
结合匿名函数,可以实现对多列进行有序编码。
cat_columns = df.select_dtypes(['object']).columns
df[['Sex_label_4','Course_label_7']] = df[cat_columns].apply(lambda x: pd.factorize(x)[0])
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 七、Scrapy框架-案例1
- manim边学边做--空心多边形
- Python 字典(Dict)详解与实战应用
- Python100个库分享第22个—xlwings的写入与读取 (办公篇)
- 【Python】从基础到进阶(七):深入理解Python中的异常处理与调试技巧
- 怎么用CAPL与Python交互
- 【Python · Pytorch】配置cuda环境 & cuDNN库
- python爬虫可视化主题:python北京景点数据可视化和景点推荐系统源代码作品开题报告
- 下载pycharm后还要python吗,用python必须下载pycharm
- 人工智能和机器学习:探讨人工智能和机器学习的最新发展、应用、挑战和未来趋势
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj
- Python pyinstaller打包exe最完整教程
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应