数据导入与预处理-第6章-04pandas综合案例

  • 1 pandas综合案例-运动员信息数据
    • 1.1 查看数据
    • 1.2 数据处理与分析

1 pandas综合案例-运动员信息数据

1.1 查看数据

导入数据:

import numpy as np
import pandas as pd

查看数据-运动员信息采集01.csv
数据下载地址:
https://download.csdn.net/download/m0_38139250/86789510
下载后解压到工程目录下即可

file_one = pd.read_csv('file:运动员信息采集01.csv', encoding='gbk')
file_one

输出为:

查看数据-运动员信息采集02.excel

file_two = pd.read_excel('file:运动员信息采集02.xlsx',engine="openpyxl")
file_two

输出为:

合并数据

# 采用外连接的方式合并数据
all_data = pd.merge(left=file_one,right=file_two, how='outer')
all_data

输出为:

1.2 数据处理与分析

筛选出国籍为中国的运动员

# 筛选出国籍为中国的运动员
all_data = all_data[all_data['国籍'] == '中国']
all_data

输出为:

查看DataFrame类对象的摘要

# 查看DataFrame类对象的摘要,包括各列数据类型、非空值数量、内存使用情况等
all_data.info()

输出为:

检测all_data中是否有重复值

# 检测all_data中是否有重复值
all_data[all_data.duplicated().values==True]

输出为:

删除all_data中的重复值

# 删除all_data中的重复值,并重新对数据进行索引
all_data = all_data.drop_duplicates(ignore_index=True)
all_data.head(10)

输出为:

筛选出项目为篮球的运动员并访问“出生日期”一列的数据

# 筛选出项目为篮球的运动员
basketball_data= all_data[all_data['项目'] == '篮球']
# 访问“出生日期”一列的数据
basketball_data['出生日期']

输出为:

修改出生日期列

import datetime
basketball_data = basketball_data.copy()
# 将以“x”天显示的日期转换成以“x年x月x日”形式显示的日期
initial_time = datetime.datetime.strptime('1900-01-01', "%Y-%m-%d")
for i in basketball_data.loc[:, '出生日期']:if type(i) == int:new_time = (initial_time + datetime.timedelta(days=i)).strftime('%Y{y}%m{m}%d{d}').format(y='年', m='月', d='日')basketball_data.loc[:, '出生日期'] = basketball_data.loc[:, '出生日期'].replace(i, new_time)
# 为保证出生日期的一致性,这里统一使用只保留到年份的日期
basketball_data.loc[:, '出生日期'] = basketball_data['出生日期'].apply(lambda x:x[:5])
basketball_data['出生日期'].head(10)

输出为:

筛选男篮运动员

# 筛选男篮球运动员
male_data = basketball_data[basketball_data['性别'].apply(lambda x :x =='男')]
male_data = male_data.copy()
# 计算身高平均值(四舍五入取整)
male_height = male_data['身高'].dropna()
fill_male_height = round(male_height.apply(lambda x : x[0:-2]).astype(int).mean())
fill_male_height = str(int(fill_male_height)) + '厘米'
# 填充缺失值
male_data.loc[:, '身高'] = male_data.loc[:, '身高'].fillna(fill_male_height)
# 为方便后期使用,这里将身高数据转换为整数
male_data.loc[:, '身高'] = male_data.loc[:, '身高'].apply(lambda x: x[0:-2]).astype(int)
# 重命名列标签索引
male_data.rename(columns={'身高':'身高/cm'}, inplace=True)
male_data

输出为:

筛选女篮球运动员数据

# 筛选女篮球运动员数据
female_data = basketball_data[basketball_data['性别'].apply(lambda x :x =='女')]
female_data = female_data.copy()
data = {'191cm':'191厘米','1米89公分':'189厘米','2.01米':'201厘米','187公分':'187厘米','1.97M':'197厘米','1.98米':'198厘米','192cm':'192厘米'}
female_data.loc[:, '身高'] = female_data.loc[:, '身高'].replace(data)
# 计算女篮球运动员平均身高
female_height = female_data['身高'].dropna()
fill_female_height = round(female_height.apply(lambda x : x[0:-2]).astype(int).mean())
fill_female_height =str(int(fill_female_height)) + '厘米'
# 填充缺失值
female_data.loc[:, '身高'] = female_data.loc[:,  '身高'].fillna(fill_female_height)
# 为方便后期使用,这里将身高数据转换为整数
female_data['身高'] = female_data['身高'].apply(lambda x : x[0:-2]).astype(int)
# 重命名列标签索引
female_data.rename(columns={'身高':'身高/cm'}, inplace=True)
female_data

输出为:

替换数据

# 替换数据
female_data.loc[:, '体重'] = female_data.loc[:, '体重'].replace({'88千克': '88kg'})
female_data

输出为:

采用前向填充的方式,替换体重为 8 的值

# 采用前向填充的方式,替换体重为 8 的值
female_data['体重'].replace(to_replace='8kg', method='pad',inplace=True)
female_data

输出为:

计算女篮球运动员的平均体重

# 计算女篮球运动员的平均体重
female_weight = female_data['体重'].dropna()
female_weight = female_weight.apply(lambda x :x[0:-2]).astype(int)
fill_female_weight = round(female_weight.mean())
fill_female_weight = str(int(fill_female_weight)) + 'kg'
# 填充缺失值
female_data.loc[:,'体重'].fillna(fill_female_weight, inplace=True)
female_data

输出为:

查看男和女蓝球运动员的数据

#  查看男和女蓝球运动员的数据
basketball_data = pd.concat([male_data, female_data])
basketball_data['体重'] = basketball_data['体重'].apply(lambda x : x[0:-2]).astype(int)
basketball_data.rename(columns={'体重':'体重/kg'}, inplace=True)
basketball_data.head(5)

输出为:

设置中文显示 使用箱形图检测男篮运动员身高一列是否有异常值

from matplotlib import pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 使用箱形图检测男篮运动员身高一列是否有异常值
male_data.boxplot(column=['身高/cm'])
plt.show()

输出为:

使用箱形图检测女篮运动员身高一列是否有异常值

# 使用箱形图检测女篮运动员身高一列是否有异常值
female_data.boxplot(column=['身高/cm'])
plt.show()

输出为:

定义3σ原则检测函数

# 定义基于3σ原则检测的函数
def three_sigma(ser): # 计算平均数mean_data = ser.mean()# 计算标准差std_data = ser.std()# 根据数值小于μ-3σ或大于μ+3σ均为异常值rule = (mean_data-3*std_data>ser) | (mean_data+3*std_data<ser)# 返回异常值的位置索引index = np.arange(ser.shape[0])[rule]# 获取异常值数据outliers = ser.iloc[index]return outliers
# 使用3σ原则检测女篮运动员的体重数据
female_weight = basketball_data[basketball_data['性别'] == '女']
three_sigma(female_weight['体重/kg'])

输出为:

使用3σ原则检测男篮运动员的体重数据

# 使用3σ原则检测男篮运动员的体重数据
male_weight = basketball_data[basketball_data['性别'] == '男']
three_sigma(male_weight['体重/kg'])

输出为:

以性别分组,对各分组执行求平均数操作,并要求平均数保留一位小数

# 以性别分组,对各分组执行求平均数操作,并要求平均数保留一位小数
basketball_data.groupby('性别').mean().round(1)

输出为:

根据计算的年龄值绘制直方图

import matplotlib.pyplot as plt
# 设置图表中文字的字体为黑体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 根据出生日期计算年龄
ages = 2020 - basketball_data['出生日期'].apply(lambda x : x[0:-1]).astype(int)
# 根据计算的年龄值绘制直方图
ax = ages.plot(kind='hist')
# 设置直方图中x轴、y轴的标签为“年龄(岁)”和“频数”
ax.set_xlabel('年龄(岁)')
ax.set_ylabel('频数')
# 设置x轴的刻度为“ages的最小值, ages的最小值+2, ..., ages最大值+1”
ax.set_xticks(range(ages.min(),ages.max()+1, 2))
plt.show()

输出为:

增加“体质指数”一列

# 增加“体质指数”一列
basketball_data['体质指数'] = 0
basketball_data.head(5)

输出为:

计算体质指数

# 计算体质指数
def outer(num):def ath_bmi(sum_bmi):weight = basketball_data['体重/kg']height = basketball_data['身高/cm'] sum_bmi =  weight / (height/100)**2return num + sum_bmireturn ath_bmi
basketball_data['体质指数'] = basketball_data[['体质指数']].apply(outer(basketball_data['体质指数'])).round(1)
basketball_data

输出为:

统计体质指数为非正常的女篮运动员的数量

groupby_obj = basketball_data.groupby(by="性别")
females = dict([x for x in groupby_obj])['女']['体质指数'].values
# 统计体质指数为非正常的女篮运动员的数量
count = females[females < 19].size + females[females > 24].size
print(f'体质指数小于19:{females[females < 19]}')
print(f'体质指数大于24:{females[females > 24]}')
print(f'非正常体质范围的总人数:{count}')

输出为:

统计体质指数为非正常的男篮运动员的数量

males = dict([x for x in groupby_obj])['男']['体质指数'].values
# 统计体质指数为非正常的男篮运动员的数量
count = males[males < 20].size + males[males > 25].size
print(f'体质指数小于20:{males[males < 20]}')
print(f'体质指数大于25:{males[males > 25]}')
print(f'非正常体质范围的总人数:{count}')

输出为:

数据导入与预处理-第6章-04pandas综合案例相关推荐

  1. 数据导入与预处理-第4章-数据获取python读取pdf文档

    数据导入与预处理-第4章-数据获取Python读取PDF文档 1 PDF简介 1.1 pdf是什么 2 Python操作PDF 2.1 pdfplumber库 2.2 pdfplumber基本操作 2 ...

  2. 数据导入与预处理-第5章-数据清理

    数据导入与预处理-第5章-数据清理 1. 数据清理概述 1.1 数据清理概述 1.2 什么是缺失值 1.3 什么是重复值 1.4 什么是异常值 2. 数据清理案例 2.1 缺失值处理 2.1.1 缺失 ...

  3. 数据导入与预处理-拓展-pandas时间数据处理01

    数据导入与预处理-拓展-pandas时间数据处理01 Pandas时序数据系列博客 Pandas时间序列数据处理 1.好用的Python库 2.Pandas历史 3.时序数据处理 3.1 时序中的基本 ...

  4. 2021年大数据Hive(十二):Hive综合案例!!!

    全网最详细的大数据Hive文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hive综合案例 一.需求描述 二.项目表的字段 三.进 ...

  5. dplyr | 数据导入和预处理的常用函数

    在正式分析数据前,我们通常需要先预处理一下数据,比如筛选有效样本,定义变量格式,处理缺失值等,目的是把数据整理成比较清洁的形式,便于后续处理,而R的tidyverse系列工具包针对此提供了丰富多样的处 ...

  6. 数据导入与预处理——数据导入导出实验一

    目录 1.MySQL下载与安装 2.实验内容 附件: 2.1 任务一解答: 2.2 任务二解答: 销售部门输入: 物流部门输入: 客户关系部门输入: 文本文件输出: 仓库部门输入:​ 售后部门输入 : ...

  7. 数据导入与预处理实验二---json格式文件转换

    一.实验概述: [实验目的] 初步掌握数据采集的方法: 初步掌握利用爬虫爬取网络数据的方法 掌握不同数据格式之间的转换方法: [实施环境](使用的材料.设备.软件) Linux或Windows操作系统 ...

  8. 第2章 数据认知与预处理

    <大数据挖掘及应用>学习笔记. 第2章 数据认知与预处理 2.1 数据分析的定义和流程 数据分析(data analysis)是指用适当的统计分析方法对收集来的大量数据进行分析和解释,提取 ...

  9. mysql 导入百万级数据 几种 java_Java 修行第034天--执行计划及其使用--Oracle数据导入导出--第三章MySQL使用...

    执行计划中牢记几句话: -- 尽量避免是*代替所有列,编写查询语句时使用具体列名代替*,可以防止全表扫描 -- 尽可能少的使用like关键字进行模糊查询 -- 建立适当的索引可以提高查询效率 十三. ...

  10. 第3.1章:StarRocks数据导入--Insert into

    Insert Into是我们在MySQL中常用的导入方式,StarRocks同样也支持使用Insert into的方式进行数据导入,并且每次insert into操作都是一次完整的导入事务. 在Sta ...

最新文章

  1. 并发容器CopyOnWriteArrayList
  2. LeetCode 8 字符串转换整数 (atoi)
  3. mysql 代替and_MYSQL OR与AND同时出现的用法
  4. product sales data determination in Opportunity item
  5. cass出现验证许可_ASML:DUV光刻机无需美国许可!最新一代EUV光刻机明年发布:加工精度提升至1.1nm...
  6. Advanced Bash-Scripting Guide 学习笔记一
  7. android jni java类型与c语言类型互换
  8. jax-rs jax-ws_您的JAX-RS API并非天生就等于:使用动态功能
  9. “全息数字人”——健康医疗 大数据应用的新模式
  10. 有人说JavaScript是未来的编程语言?这是为什么?
  11. Bellman-Ford 算法及其优化
  12. mysql 索引 范围扫描_MySql学习笔记(六):扫描范围
  13. 千万58招聘人员的选择值得信赖-米苏 58自动循环发帖器V9.03
  14. 计算机水平2018下半年模拟考试,2018年下半年程序员考试下午试题及答案
  15. 变色龙安装苹果系统的步骤(学习笔记)
  16. C++输出谢尔宾斯基三角形
  17. ae合成设置快捷键_AE常用的快捷键(UI动效方向)
  18. MongoDB windows 局域网连接
  19. 如何从linux下载超过4G的文件到windows
  20. ffmpeg运行在服务器上,如何在脱离流媒体服务器的时候使用ffmpeg 监测.m3u8直播视频流的状态?...

热门文章

  1. 【Web技术】441- 蚂蚁前端研发最佳实践
  2. Map Coloring
  3. 重庆链家租房数据分析
  4. 疯狂Python讲义学习笔记(含习题)之网络编程
  5. 7.基本数据类型详细讲解-int/bool/str
  6. ABAP SPLITTER技术总结及使用技巧
  7. 什么是 docker?docker和虚拟机有什么差别和不同?
  8. s5p4418的uboot网络无法使用问题解决
  9. 百度语音识别开放平台SDK使用方法
  10. idea编辑窗口显示outdated version解决方案