数据治理 | 数据分析与清洗工具:Pandas 创建新字段( 赠送本文同款数据!)
目录
一、前言
二、如何创建新字段
直接运算法 使用 Python 函数或匿名函数 (1)使用 Python 函数 (2)使用匿名函数 使用映射关系或自定义方法 (1)使用映射关系 (2)使用自定义方法 三、总结
----------------------------------------
📜本文共4645字,预计阅读时间12分钟,感谢阅读!
💡 本文所用数据为:【数字经济专题数据库接受投资区域分布统计数据.xlsx】
💡 数据获取方式:关注本公众号,后台回复关键词“20220408”即可获取
Part1前言
Part2如何创建新字段
字段 1
,字段 2
的数据通过某种运算得到字段 3
。字段 3
就是由 字段 1
和字段 2
衍生而来的。不难看出,上图中 “某种运算” 实际上就是数字的加法运算。在我们常用的 Excel 中,可以通过使用运算公式和自动填充和来实现这种功能,如下图所示:那么在 Python 中,我们如何完成类似的操作呢?一般情况下,根据运算规则的难易或复杂程度可以使用以下三种方式来创建新的字段:
方式 | 描述 | 特点 |
直接运算法 | 可以通过简单 +、-、×、÷、>、<、取余数等等数学计算方法来生成新的字段。 | 使用方法简单易懂;仅数字型数据之间支持 -、×、÷等稍复杂的运算,字符型数据之间仅支持加法(字符串拼接)运算。 |
使用 Python 函数或匿名函数 | 通过使用 Python 自带的函数或者匿名函数配合 Pandas 中的 | 可以调用 Python 的函数和匿名函数,支持简单的条件判断;多用于使用一个字段生成另一个字段的场景。 |
使用自定义方法或映射关系 | 通过使用 Pandas 中的 | 可以调用用户的自定义方法或者某种映射关系;支持使用更复杂的条件判断和运算;支持 |
1直接运算法
# 指定参数 nrows=31,表示仅读取前 31 行数据(该数据前 31 行数据为有效数据)
data = pd.read_excel('数字经济专题数据库接受投资区域分布统计数据.xlsx', nrows=31)
# 输出查看前 9 行数据
data.head(9)
场景 1:使用接受投资笔数
减去接受风险投资笔数
得到新字段接受非风险投资笔数
。
# 直接使用字段做减法即可
data['接受非风险投资笔数'] = data['接受投资笔数'] - data['接受风险投资笔数']
data.head(9)
2使用 Python 函数或匿名函数
apply()
方法,我们即可以使用一个字段(Series 类型数据)调用这个方法,也可以使用多个字段(DataFrame 类型)调用这个方法;apply()
需要接收一个 func
参数,该参数必须是一个函数,该函数可以是 Python 内置函数或调用函数、匿名函数或以及自定义函数(这里我们先介绍前面两种)。这个函数会将调用它的数据当做是传入的参数,并返回该函数的运算结果。下面我们将举例图解这个过程。(1)使用 Python 函数
场景 2: 得到省份
字段中每个数据值的数据类型,保存到类型
字段中。
# 先把刚才得到的 “接受非风险投资笔数” 字段删除
data.drop('接受非风险投资笔数', axis=1, inplace=True)
# 生成“类型”字段
data['类型'] = data['省份'].apply(type)
data.head(9)
data['省份'].apply(type)
,调用 apply()
的是 data['省份']
,这是一个 Series 对象。而 apply()
中的 func 参数是 type()
,我们知道,type()
的作用是返回传入对象的类型。所以代码 data['类型'] = data['省份'].apply(type)
的工作原理如下图所示:(2)使用匿名函数
场景 3:生成投资量
字段,当接收投资笔数大于等于 10000 时记为大量,否则记为少量。
# 先把刚才得到的 “类型” 字段删除
data.drop('类型', axis=1, inplace=True)
# 生成“投资量”字段
data['投资量'] = data['接受投资笔数'].apply(lambda M: '大量' if M >= 10000 else '少量')
data.head(9)
3使用映射关系或自定义方法
(1)使用映射关系
场景 4:根据省份
字段得到省份简称
字段。
# 先把刚才得到的 “投资量” 字段删除
data.drop('投资量', axis=1, inplace=True)
# 定义映射关系,类型为字典
relationship = {'北京市':'京',
'天津市':'津',
'上海市':'沪',
'重庆市':'渝',
'河北省':'冀',
'山西省':'晋',
'内蒙古自治区':'内蒙古',
'辽宁省':'辽',
'吉林省':'吉',
'黑龙江省':'黑'}
# 使用上面定义的映射关系得到 “省份简称” 字段
data['省份简称'] = data['省份'].map(relationship)
data
(2)使用自定义方法
apply()
的参数 axis=1
,表示沿着横轴运算。场景 5:生成非风险投资所占百分比
字段;要求保留三位小数。
# 先把刚才得到的 “省份简称” 字段删除
data.drop('省份简称', axis=1, inplace=True)
# 定义计算目标数据的方法
def get_rate(df):
# 先定义需要使用的字段
venture = df['接受风险投资笔数']
investment_num = df['接受投资笔数']
# 计算得到非风险投资数量
not_venture = investment_num - venture
# 计算非风险投资的占比
rate = not_venture / investment_num
# 保留三位小数
rate_3 = round(rate, 3)
# 转为字符型后加上百分号
RATE = str(rate_3) + '%'
# 将所得结果返回
return RATE
# 将上面的自定义方法传入 apply()
data['非风险投资占比'] = data.apply(get_rate, axis=1)
data.head(9)
使用自定义方法可以处理更为复杂的字段生成需求,当需要使用多个字段得到其他字段时,一般需要使用整个 DataFrame 调用 apply()
并设置参数 axis=1
。原理如下图所示:
Part3总结
apply()
的应用更是千变万化,这正是 Pandas 对比 Excel 的优势所在。我们将在数据治理板块中推出一系列原创推文,帮助读者搭建一个完整的社科研究数据治理软硬件体系。该板块将涉及以下几个模块:
1. 计算机基础知识
2. 编程基础
(1) 数据治理 | 带你学Python之 环境搭建与基础数据类型介绍篇
(4) 数据治理 | 还在用Excel做数据分析呢?SQL它不香吗
(5) 数据治理 | 普通社科人如何学习SQL?一篇文章给您说明白
3. 数据采集
4. 数据存储
(1) 安装篇:数据治理 | 遇到海量数据stata卡死怎么办?这一数据处理利器要掌握
(2) 管理篇: 数据治理 | 多人协同处理数据担心不安全?学会这一招,轻松管理你的数据团队
(3) 数据导入:数据治理 | “把大象装进冰箱的第二步”:海量微观数据如何“塞进”数据库?
5. 数据清洗
(3) 数据治理 | 数据分析与清洗工具:Pandas数据选取与修改
(4) 数据治理 | 数据分析与清洗工具:用Pandas快速选出你的“心之所向”
(5) 数据治理 | 数据分析与清洗工具:Pandas缺失值与重复值处理
(6) 数据治理 | 数据分析与清洗工具:Pandas 数据类型转换(赠送本文同款数据!!)
(7)本期内容:数据治理 | 数据分析与清洗工具:Pandas 创建新字段(赠送本文同款数据!)
6. 数据实验室搭建
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
文 | 《社科领域大数据治理实务手册》
欢迎扫描👇二维码添加关注