数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas高级—训练场(2)(十二)

简介: 你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,

2.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 其实就是填充。

40.png

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

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

image.png

我们来观察数据:

41.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])

42.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)

43.png

2.4.4 男生体测分数成绩转换

2.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)

44.png

2.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)

45.png

2.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()

46.png

2.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)

47.png

2.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)

48.png

2.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)

49.png


目录
相关文章
|
1月前
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
81 22
|
2月前
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
154 73
|
2月前
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
137 71
|
2月前
|
数据采集 数据可视化 索引
Pandas数据应用:股票数据分析
本文介绍了如何使用Pandas库进行股票数据分析。首先,通过pip安装并导入Pandas库。接着,从本地CSV文件读取股票数据,并解决常见的解析错误。然后,利用head()、info()等函数查看数据基本信息,进行数据清洗,处理缺失值和重复数据。再者,结合Matplotlib和Seaborn进行数据可视化,绘制收盘价折线图。最后,进行时间序列分析,设置日期索引、重采样和计算移动平均线。通过这些步骤,帮助读者掌握Pandas在股票数据分析中的应用。
93 5
|
3月前
|
数据采集 数据可视化 数据挖掘
Python数据分析:Pandas库实战指南
Python数据分析:Pandas库实战指南
|
3月前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
3月前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
72 2
|
3月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
114 0
|
3月前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
83 2