阅读本文大约需要 3 分钟

摘 要

这两天在平台上看到一些创作者失去创作动力的感慨,OF只想说往事如昙花一现,我们都需要时刻静下心来,认真地考虑下自己的创作目标并付诸行动。遥想当年OF做软件系统的时候,开源社区还没有像现在这样健全。再看看如今,衷心感谢创作者们孜孜不倦地分享,建立了一个良好的创作氛围。说不定再写几年,也可以出本书啥的。

主要内容:Excel 办公自动化和数据分析

适用人群:办公室职员 / Python 初学者 / 有志从事数据分析工作的人员

准备内容:Anaconda-Spyder;re、Pandas库

二、数据处理

言归正传,上篇OF介绍了运用数据爬虫获取到了历届奥运会的奖牌数据

观察下这些数据,先列出需要改善的点:

1、知识点1去掉空格:替换replace()

str.replace(正则式/字符串,替换的目标字符)

#将国家列字符串中的空格都去除
df['国家'].replace('\s+','',regex=True,inplace=True) 

2、知识点2删除多列空值的行:删除dropna()

df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

参数说明:

  • axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
  • how:默认为 'any' 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how='all' 一行(或列)都是 NA 才去掉这整行。
  • thresh:设置需要多少非空值的数据才可以保留下来的。
  • subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。
  • inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。

当金牌、银牌、铜牌都为空时,我们可以删除该行,用dropna(thresh=1)就是保留至少1个非空值的数据可以保留,那我们想办法先把其他列数据都置空,再判断每行只要有一个数据就保留

cols=['金牌','银牌','铜牌']
#df[cols]!=""   判断3列数据各是True or False
#df[df[cols]!=""]   呈现所有列数据,只留下3列数据,其他列都置空
#df[df[cols]!=""].dropna(thresh=1).index   保留至少有1个非空值的行集合

3、知识点3删除含有XX内容的行:-df[].isin([])

当我们进行数据处理时,最重要的是学会找规律,用最简单的方法实现我们想要达到的效果,比如我们看到的问题是要把奖牌都为中文的行删除,我们同时可以观察到,这些行的名次列都是“名次”

#删除原中文标题(名次列为"名次"的行删除)
df = df[-df["名次"].isin(["名次"])]

4、知识点4通过条件找其他列数据并删除

1)我们的条件是:非数字行,首先筛选['名次']列中非数字行

2)找到的某列数据会有很多重复,我们可以进行去重处理drop_duplicates()

3)最后对含该列的数据进行删除

#筛选列中非数字的行
a = df[['名次']].apply(pd.to_numeric, errors='coerce').notnull().all(axis=1)
#筛选列中不为数字的行对应的标题名称
title_list = df.loc[a==False,"标题"].drop_duplicates()
#删除标题列中含有title_list内容的行
df = df[-df["标题"].isin(title_list)]

5、知识点5多个字符替换:replace({})

df.replace({'-':'0','–':'0','_':'0'},inplace=True)

6、知识点6替换空值为'0':fillna()

df.fillna('0', inplace=True) 

7、知识点7修改列的数据类型:astype()

df[cols].astype(int)

8、知识点8匹配内容替换

#规范年份列数据
year = []
for y in df['年份']:a = re.search("[0-9][0-9][0-9][0-9]", y, re.X).group()year.append(a)
df.loc[:, '年份'] = year

完整代码如下:

import pandas as pd
import re
df = pd.read_excel("./data/Olympic2.xlsx")
#将国家列字符串中的空格都去除
df['国家'].replace('\s+','',regex=True,inplace=True)
#删除金牌、银牌、铜牌都为空的行
cols=['金牌','银牌','铜牌']
df=df.loc[df[df[cols]!=""].dropna(thresh=1).index]
#删除原中文标题(名次列为"名次"的行删除)
df = df[-df["名次"].isin(["名次"])]
##删除奖牌数为国家的数据
#筛选列中不为数字的行
a = df[['名次']].apply(pd.to_numeric, errors='coerce').notnull().all(axis=1)
#筛选列中不为数字的行对应的标题名称
title_list = df.loc[a==False,"标题"].drop_duplicates()
df = df[-df["标题"].isin(title_list)]
#规范年份列数据
year = []
for y in df['年份']:a = re.search("[0-9][0-9][0-9][0-9]", y, re.X).group()year.append(a)
df.loc[:, '年份'] = year
df.replace({'-':'0','–':'0','_':'0'},inplace=True)
df.fillna('0', inplace=True)
df[cols].astype(int)
df.to_excel("./data/Olympic10.xlsx")

输出结果:

结 语

通过我们一系列操作,看到处理完成的数据,是不是感觉焕然一新。OF在本篇文章中对数据处理又补充了几个知识点,相信我们都对数据处理有了更深的理解。今天就写到这里,希望初学者们好好体会下思路,将复杂的事项拆分成一个个步骤,这样一点点积累起来就能把项目做成功。在写python程序前,先构思下步骤,再根据步骤一个个完成。本系列还剩下最后一篇文章动态排序正向您招手,尽请期待。

1、数据采集-爬虫;

1896-2021历届奥运会奖牌动态排序动画(Python数据采集)

2、数据处理-数据清洗;(本篇文章)

3、数据动态排序。

1896-2021历届奥运会奖牌榜(Python数据处理)相关推荐

  1. 1896-2021历届奥运会奖牌榜动态排序(Matplotlib图表动画)

    摘 要 在制作动态排序动画之前,我们看一下数据的整理情况: a.对第1)种大部分数据的情况,先爬取下来,输出到excel(1): b.对第2)种小部分数据的情况,也先爬取下来,输出到另一个excel( ...

  2. Python 爬取东京奥运会奖牌榜!中国原来这么厉害!

    需求分析 我们要爬取的是 2020东京奥运会奖牌榜. (截至 2021/8/2 下午 17:30) 右键单击网页,选择"检查",调出开发者界面.然后点击右侧选项卡中的"网 ...

  3. 今年的奥运会延期至2021年夏季举行,盘点一下历届奥运会数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于CDA数据分析师 ,作者:CDA数据分析师 前言 2020年年初,突然袭来的新冠疫情 ...

  4. 1896-2021历届奥运会奖牌动态排序动画(Python数据采集)

    阅读本文大约需要 5 分钟 摘 要 通过前4篇数据分析文章的讲解,本周开始OF要为大家带来数据分析的实战.实战的选材呢,OF是随机选取的,如果大家有什么想要分析的难题,可以私信沟通. 本来想从网上直接 ...

  5. 可视化|历届奥运会数据可视化

    文章目录 1 数据来源 2 数据可视化 2.1 数量可视化 1. 男性运动员年龄分布直方图 2. 女性运动员年龄分布直方图 3. 全体运动员年龄分布直方图 4. 男性运动员身高体重分布散点图 5. 女 ...

  6. 数据爬虫及可视化——东京奥运会奖牌榜

    东京奥运会奖牌榜爬虫 通过手机浏览器实时查看奥运会奖牌信息 将手机浏览器访问的地址复制,通过计算机浏览器访问 打开谷歌浏览器的开发者工具,切换到network选项卡,刷新页面重新请求. 拖动滚动条,找 ...

  7. 基于STM32+ESP8266的奥运会奖牌榜设计之经典

    (一)实验目的和任务 1.掌握esp8266模块的TCP协议,进行联网和服务器 2.熟悉jscon库的移植和API的使用,对jscon格式的数据进行解析 3.掌握LCD或串口屏显示东京奥运会奖牌榜 ( ...

  8. 【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行

    [2021最新版]Python 并发编程实战,用多线程.多进程.多协程加速程序运行 视频地址:https://www.bilibili.com/video/BV1bK411A7tV/ P1 Pytho ...

  9. 对python 数据处理中的LabelEncoder 和 OneHotEncoder详解

    对python 数据处理中的LabelEncoder 和 OneHotEncoder详解_起飞的木木的博客-CSDN博客_labelencoder原理

最新文章

  1. 免安装的mysql删除_MySQL5.7 免安装版配置及删除图文教程
  2. java从尾到头打印链表数据_Java编程实现从尾到头打印链表代码实例
  3. HealthKit开发快速入门教程之HealthKit开发概述简介
  4. 二叉树的序列化与反序列化
  5. (转)Javascript面向对象编程(二):构造函数的继承
  6. 如何在群晖服务器上启用plex远程访问,如何在Synology NAS上更新Plex | MOS86
  7. 统一返回的json时间格式
  8. C#-using与添加引用的关系
  9. 计算机二级java试题_计算机二级考试《Java》试题及答案
  10. 记一次mysql进程无法启动的解决方案
  11. Matlab--Figure界面工具栏使用简要说明
  12. fwoa中workflow_requestbase表currentnodetype字段含义及查看归档流程的requestid
  13. 团队成员技术发展路线
  14. 鸿蒙系统国内厂商,谷歌自食其果,华为鸿蒙系统已经被启用,国内厂商或将弃用安卓...
  15. excel中如何冻结前三行或者其他行
  16. 一个人工作之余6元上线一款APP的血泪史
  17. ospf 指定dr_OSPF协议 DR/BDR的选取规则
  18. DOS命令之ren:重命名
  19. 2022年5月5日,第28天
  20. 启扬智慧电梯物联网解决方案,解决运营、维保、监管难题

热门文章

  1. android 文档api
  2. “滴灌”代替“漫灌”:“全链路增长”的百度联盟解
  3. 触摸屏显示接口设计-用于便携式热像仪的OMAP双核处理器
  4. noip2013 总结
  5. IDEA更换主题背景为黑色和设置背景图片并设置字体大小
  6. pycharm安装python_pycharm如何安装numpy
  7. 一步解决豆瓣防止火车头采集的问题
  8. RemObjects Suite Subscription for Delphi
  9. android usb 摄像头 分辨率,Android 驱动USB摄像头
  10. 商城-商品规格管理-商品规格数据结构