pandas 高级(七)

简介: 本文其实属于:Python的进阶之道【AIoT阶段一】的一部分内容,本篇把这部分内容单独截取出来,方便大家的观看,本文介绍 pandas 高级,读本文之前建议先修:pandas 入门,后续还会发出一篇 pandas 进阶供读者进行进一步的学习了解。

4.3 体测成绩评分表数据转换

首先我们下载一个 Exel 文件:

链接: https://pan.baidu.com/s/1wxeENf0tjx5bWxTGxkZGeg?pwd=szmk

提取码: szmk

复制这段内容后打开百度网盘手机App,操作更方便哦

下载完成之后,把该文件和我们的代码放到同一个文件夹下,这一操作我们在之前的博客中已经反复说到,这里就不再进行演示

我们先按照传统的方法把数据进行加载查看

import numpy as np
import pandas as pd
score = pd.read_excel('./体侧成绩评分表.xls')
score

image.png

是不是感觉看起来特别的别扭?这是因为我们在我们的 Excel 文件中,我们最上方一行每个都占了两列的原因,所以代码运行中的 Unnamed1,Unnamed3 其实就是填充。

39.png

针对上述现象,我们可以按如下方法执行:

import numpy as np
import pandas as pd
# header:告诉 pandas 第一行和第二行作为列索引
score = pd.read_excel('./体侧成绩评分表.xls',header = [0, 1])
score

image.png

我们来观察数据:

image.png

发现成绩的形式都是:xx'xx" 的形式,现在我们想把它转为数字的形式:

def convert(x):
    if isinstance(x, str):
        s = float(x.replace('\"', '').replace('\'', '.'))
                  # 删除 "                     替换 ' 为 .
    return s
x = '''3'30"'''
convert(x)

image.png

我们用上述方法对男生考核标准进行转换:

def convert(x):
    if isinstance(x, str):
        s = float(x.replace('\"', '').replace('\'', '.'))
    return s
# 男生考核标准转换
score.iloc[:, -4] = score.iloc[:, -4].apply(convert)
score

image.png

同样的方法,对女生信息进行转换:

score = pd.read_excel('./体侧成绩评分表.xls',header=[0, 1])
def convert(x):
    if isinstance(x, str):
        s = float(x.replace('\"', '').replace('\'', '.'))
    return s
# 男生考核标准转换
score.iloc[:, -4] = score.iloc[:, -4].apply(convert)
# 女生考核标准转换
score.iloc[:, -2] = score.iloc[: , -2].apply(convert)
score

image.png

最后保存我们的文件:

score = pd.read_excel('./体侧成绩评分表.xls',header=[0, 1])
def convert(x):
    if isinstance(x, str):
        s = float(x.replace('\"', '').replace('\'', '.'))
    return s
# 男生考核标准转换
score.iloc[:, -4] = score.iloc[:, -4].apply(convert)
# 女生考核标准转换
score.iloc[:, -2] = score.iloc[: , -2].apply(convert)
score.to_excel('./体侧成绩评分表_处理.xlsx', header=[0, 1])

40.png

再来查看以下我们的数据:

pd.read_excel('./体侧成绩评分表_处理.xlsx', header = [0, 1])

image.png

可以看到第一列多了一些奇奇怪怪的东西,我们用 index_col = 0 删除:

# index_col = 0   使用第一列作为行索引
pd.read_excel('./体侧成绩评分表_处理.xlsx', header = [0, 1], index_col = 0)

image.png

4.4 男生体测分数成绩转换

4.4.1 男生1000米跑成绩分数转换

注:代码处于运行中将显示:

image.png

下列代码运行十几秒,几十秒甚至几分钟都是正常的,耐心等待运行结果即可。

%%time
import pandas as pd
# 加载处理之后的男生体测成绩
df_boy = pd.read_excel('./男生体测成绩.xlsx')
# 加载成绩评分表
score = pd.read_excel('./体侧成绩评分表_处理.xlsx', header = [0,1],index_col = 0)
# 定义转换方法
def convert(x):
    if x == 0: # 说明没有参加体能测试,分数为0分
        return 0
    for i in range(20): # 成绩划分20等级
        if x <= score['男1000米跑']['成绩'][i]:
            return score['男1000米跑']['分数'][i]
    return 0 # 说明跑的太慢了,分数为0分
df_boy['男1000米跑'].apply(convert)

41.png

4.4.2 男生1000米跑成绩分数转换并赋值

%%time
import pandas as pd
# 加载处理之后的男生体测成绩
df_boy = pd.read_excel('./男生体测成绩.xlsx')
# 加载成绩评分表
score = pd.read_excel('./体侧成绩评分表_处理.xlsx', header = [0, 1])
# 定义转换方法
def convert(x):
    if x == 0: # 说明没有参加体能测试,分数为0分
        return 0
    for i in range(20): # 成绩划分20等级
        if x <= score['男1000米跑']['成绩'][i]:
            return score['男1000米跑']['分数'][i]
    return 0 # 说明跑的太慢了,分数为0分
df_boy['男1000米跑' + '分数'] = df_boy['男1000米跑'].apply(convert)
df_boy.head(10)

42.png

4.4.3 批量转换男生速度类成绩分数

%%time
import numpy as np
import pandas as pd
df_boy = pd.read_excel('./男生体测成绩.xlsx')
score = pd.read_excel('./体侧成绩评分表_处理.xlsx', header = [0,1], index_col = 0)
cols = ['男1000米跑', '男50米跑']
def convert(x, col):
    if x == 0: # 说明没有参加体能测试,分数为0分
        return 0
    for i in range(20): # 成绩划分20等级
        if x <= score[col]['成绩'][i]:
            return score[col]['分数'][i]
    return 0 # 说明跑的太慢了,分数为0分
for col in cols:
    # args 传入的参数 (col,)元组
    s = df_boy[col].apply(convert, args = (col,))
    columns = df_boy.columns.to_list()
    index = columns.index(col) + 1 # 这一列后面
    # 向这一列后面添加一列:分数
    df_boy.insert(loc = index, column = col + '分数', value = s)
df_boy.head()

43.png

4.4.4 批量转换男生力量型成绩分数并保存

%%time
# convert自定义,名字任意
def convert(x, col):
    for i in range(20): # 成绩划分20等级
        if x >= score[col]['成绩'][i]:
            return score[col]['分数'][i]
    return 0 # 说明跳远不达标,分数为0分
cols = ['男跳远', '男体前屈', '男引体', '男肺活量']
for col in cols:
    # apply ,args = (col,)代表某一列,成绩分数转换
    s = df_boy[col].apply(convert, args = (col,))
    columns = df_boy.columns.to_list()
    # 后面插入一列
    index = columns.index(col) + 1
    df_boy.insert(loc = index, column = col + '分数', value = s)
display(df_boy.head())
df_boy.to_excel('./男生体测成绩-分数.xlsx', index = False)

44.png

4.5 女生体测成绩分数转换

%%time
import numpy as np
import pandas as pd
df_girl = pd.read_excel('./女生体测成绩.xlsx')
score = pd.read_excel('./体侧成绩评分表_处理.xlsx', header = [0,1],index_col = 0)
# 速度类型成绩分数批量转换
cols = ['女800米跑', '女50米跑']
def convert(x, col):
    if x == 0: # 说明没有参加体能测试,分数为0分
        return 0
    for i in range(20): # 成绩划分20等级
        if x <= score[col]['成绩'][i]:
            return score[col]['分数'][i]
    return 0 # 说明跑的太慢了,分数为0分
for col in cols:
    s = df_girl[col].apply(convert, args = (col,))
    columns = df_girl.columns.to_list()
    index = columns.index(col) + 1
    df_girl.insert(loc = index, column = col + '分数', value = s)
# 力量型成绩分数批量转换
cols = ['女跳远', '女体前屈', '女仰卧', '女肺活量']
def convert(x, col):
    for i in range(20): # 成绩划分20等级
        if x >= score[col]['成绩'][i]:
            return score[col]['分数'][i]
    return 0 # 说明跳远不达标,分数为0分
for col in cols:
    s = df_girl[col].apply(convert, args = (col,))
    columns = df_girl.columns.to_list()
    index = columns.index(col) + 1
    df_girl.insert(loc = index, column = col + '分数', value = s)
df_girl.to_excel('./女生体测成绩-分数.xlsx', index = False)
df_girl.head(10)

45.png

4.6 保存成绩

最后我们把男女生成绩整合到一个文件当中:

with pd.ExcelWriter('./分数汇总.xlsx') as writer:
    df_boy.to_excel(writer, sheet_name = '男生', index = False)
    df_girl.to_excel(writer, sheet_name = '女生', index = False)

46.png


目录
相关文章
|
索引 Python
Pandas 高级教程——高级时间序列分析
Pandas 高级教程——高级时间序列分析
617 4
|
数据可视化 数据挖掘 数据处理
进阶 pandas DataFrame:挖掘高级数据处理技巧
【5月更文挑战第19天】本文介绍了Pandas DataFrame的高级使用技巧,包括数据重塑(如`pivot`和`melt`)、字符串处理(如提取和替换)、日期时间处理(如解析和时间序列操作)、合并与连接(如`merge`和`concat`),以及使用`apply()`应用自定义函数。这些技巧能提升数据处理效率,适用于复杂数据分析任务。推荐进一步学习和探索Pandas的高级功能。
|
数据挖掘 数据处理 Python
【Python DataFrame 专栏】深入探索 pandas DataFrame:高级数据处理技巧
【5月更文挑战第19天】在 Python 数据分析中,pandas DataFrame 是核心工具。本文介绍了几个高级技巧:1) 横向合并 DataFrame;2) 数据分组与聚合;3) 处理缺失值;4) 数据重塑;5) 条件筛选;6) 使用函数处理数据。掌握这些技巧能提升数据处理效率和分析深度,助你更好地发掘数据价值。
189 1
【Python DataFrame 专栏】深入探索 pandas DataFrame:高级数据处理技巧
|
数据采集 存储 数据可视化
Pandas高级教程:数据清洗、转换与分析
Pandas是Python的数据分析库,提供Series和DataFrame数据结构及数据分析工具,便于数据清洗、转换和分析。本教程涵盖Pandas在数据清洗(如缺失值、重复值和异常值处理)、转换(数据类型转换和重塑)和分析(如描述性统计、分组聚合和可视化)的应用。通过学习Pandas,用户能更高效地处理和理解数据,为数据分析任务打下基础。
1380 3
|
数据采集 数据挖掘 数据处理
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
【7月更文挑战第14天】Python的Pandas和NumPy库是数据分析的核心工具。Pandas以其高效的数据处理能力,如分组操作和自定义函数应用,简化了数据清洗和转换。NumPy则以其多维数组和广播机制实现快速数值计算。两者协同工作,如在DataFrame与NumPy数组间转换进行预处理,提升了数据分析的效率和精度。掌握这两者的高级功能是提升数据科学技能的关键。**
190 0
|
数据采集 机器学习/深度学习 数据处理
数据科学家的秘密武器:Pandas与NumPy高级应用实战指南
【7月更文挑战第14天】Pandas与NumPy在数据科学中扮演关键角色。Pandas的DataFrame和Series提供高效数据处理,如数据清洗、转换,而NumPy则以ndarray为基础进行数值计算和矩阵操作。两者结合,从数据预处理到数值分析,形成强大工具组合。示例展示了填充缺失值、类型转换、矩阵乘法、标准化等操作,体现其在实际项目中的协同效用。掌握这两者,能提升数据科学家的效能和分析深度。**
218 0
|
数据处理 Python
数据科学进阶之路:Pandas与NumPy高级操作详解与实战演练
【7月更文挑战第13天】探索数据科学:Pandas与NumPy提升效率的高级技巧** - Pandas的`query`, `loc`和`groupby`用于复杂筛选和分组聚合,例如筛选2023年销售额超1000的记录并按类别计总销售额。 - NumPy的广播和向量化运算加速大规模数据处理,如快速计算两个大数组的元素级乘积。 - Pandas DataFrame基于NumPy,二者协同加速数据处理,如将DataFrame列转换为NumPy数组进行标准化再回写,避免链式赋值。 掌握这些高级操作,实现数据科学项目的效率飞跃。
219 0
|
数据挖掘 数据处理 决策智能
Python 数据分析工具箱:深挖 Pandas 与 NumPy 高级功能,驱动智能决策
【7月更文挑战第12天】Python的Pandas和NumPy是数据分析的基石。Pandas提供灵活的数据结构如DataFrame,用于高效处理关系型数据,而NumPy则以多维数组和科学计算功能著称。两者结合,支持数据合并(如`pd.merge`)、时间序列分析(`pd.to_datetime`)和高级数组运算。通过掌握它们的高级特性,能提升数据分析效率,应用于各领域,如金融风险评估、市场分析和医疗预测,助力数据驱动的决策。学习和熟练运用Pandas与NumPy是成为出色数据分析师的关键。
163 0
|
数据采集 数据挖掘 数据处理
《Pandas 简易速速上手小册》第8章:Pandas 高级数据分析技巧(2024 最新版)
《Pandas 简易速速上手小册》第8章:Pandas 高级数据分析技巧(2024 最新版)
184 1
|
数据挖掘 数据处理 索引
Python 应知应会的Pandas高级操作
Python 应知应会的Pandas高级操作
223 0

热门文章

最新文章