[python]数据分析--数据清洗处理case1
数据预处理案例1
主要涉及pandas读取csv文件,缺失值和重复值处理,分组计数,字段类型转换 ,结果写入到Excel。
根据要求对CSV数据集进行处理要求如下:
保留数据关键信息:
time、latitude、longtitude、depth、mag、region- 注意其中的
region未直接提供,需要从数据集中的place中获取。 - 特别说明例如:
place中76km SSW of Kaktovik, Alaska,挑战要求只保留Alaska作为地区信息。如果place中存在二级地区信息(2 个逗号),例如,15km SSW of Estacion Coahuila, B.C., MX,则只保留最后一个逗号间隔的MX作为地区信息。特别地,如果不存在,分割,则保留全部数据即可。
- 注意其中的
对数据集中的缺失值(任意一项缺失)、重复值(全部字段重复)进行处理,要求直接删除相应行。异常值无需考虑。
对
mag字段进行分级:
| 震级 | 描述 |
|---|---|
| [0, 2) | micro |
| [2, 5) | light |
| [5, 7) | strong |
| [7, 9) | major |
| >=9 | great |
- 返回 mag分级不同级别对应
times对多的region及对应times(该字段需要为int类型)
数据集获取
http://labfile.oss.aliyuncs.com/courses/1176/earthquake.csv
复制上述连接然后在浏览器上打开,即可下载文件。
数据清洗
import pandas as pd
def clean()
# 读取文件
# Tips: 找到下载文件使用快捷键 Ctrl+Shift+C 可复制文件路径,然后粘贴替换引号部分内容
fn = r'D:\VSCode_Notebook\lanqiao\earthquake .csv'
df = pd.read_csv(fn)
# 对字段进行筛选
res = df[['time','latitude','longitude','depth','mag']]
place = df[['place']]
# 对place字段处理获取region
region = place['place'].str.split(',')
lst = []
for i in region:
lst.append(i[-1].strip())
region1 = pd.DataFrame(data=lst,columns=['region'])
# 合并Dataframe
res = res.join(region1)
# 去除重复值、空值
df_clean = res.drop_duplicates().dropna()
return df_clean
原过程是使用JupyterNoebook进行分步编写,主要能查看数据处理过程中数据的变化情况,将其封装成函数方便后续调用。
place = df[['place']]
# 对place字段处理获取region
region = place['place'].str.split(',')
lst = []
for i in region:
lst.append(i[-1].strip())
region1 = pd.DataFrame(data=lst,columns=['region'])
这里是对 place字段进行处理,通过 str.splt()方法进行分割,后续的 for循环主要是通过切片的方式获取所需内容,同时通过 strip()去除空格。
参考别人代码发现还有其它处理办法可改写如下:
place = df['place'].str.split(', ').tolist() # 分割字符串的时候就把空格带上,也能达到目的
region = []
for row in place:
region.append(row[-1])
region1 = pd.DataFrame(data=region,columns=['region'])
上面的合并 DataFrame 也可使用pd.concat([res,region1] ,axis=1)实现。
数据处理分析
def mag_region():
# 加载清洁后数据
df_clean = clean()
# 数据离散化,注意开闭区间
df_clean['mag'] = pd.cut(df_clean.mag, bins=[0, 2, 5, 7, 9, 15], right=False, labels=['micro', 'light', 'strong', 'major', 'great'])
print(df_clean)
# 多索引分组聚合并计数
df_group = df_clean.groupby(by=['mag', 'region']).count()
# 重置索引并去除缺失值
df_reindex = df_group.reset_index().dropna()
# 按计数从大到小排序,并使用去除重复值的方法保留下各地区最大值
df_sort = df_reindex.sort_values(
by='time', ascending=False).drop_duplicates(['mag'])
# 按要求整理并重命名
df_final = df_sort.set_index('mag')[['region', 'time']].rename(
columns={"time": "times"})
# 按题目要求将计数处理成 int 类型
df_final['times'] = df_final.times.astype('int')
return df_final
由于 csv文件中的一条条记录对应一次更新时间的地震情况统计,所以上述代码中使用分组计数完成统计要求。
结果输出
df_final = mag_region()
writer = pd.ExcelWriter('output1.xlsx')
df_final.to_excel(writer,sheet_name='out',index=True)
writer._save() # 较低版本python 使用writer.save()来保存
使用pandas进行Excel写入前,需要你的python环境中安装了openpyxl库。最后写入的结果如下:

知识小结
文末对案例中使用到的重要方法进行总结:
去重与去重复值:
df.drop_duplicates() 方法用于从 DataFrame 中删除重复的行。
该方法的用法如下:
df.drop_duplicates(subset=None, keep='first', inplace=False)
参数说明:
subset:可选参数,用于指定要考虑的列名列表。默认值为None,表示考虑所有列。keep:可选参数,用于指定保留哪一个重复行的方式。可选值为'first','last'或False。默认值为'first',表示保留第一次出现的重复行。inplace:可选参数,表示是否在原始 DataFrame 上进行修改。默认值为False,表示返回处理后的新 DataFrame。
下面是一些示例,以便更好地理解 df.drop_duplicates() 的用法:
- 删除所有列中的重复行,并返回处理后的新 DataFrame:
df_new = df.drop_duplicates()
- 只考虑某些列的重复行,并返回处理后的新 DataFrame:
df_new = df.drop_duplicates(subset=['col1', 'col2'])
- 删除所有列中的重复行,并在原始 DataFrame 上进行修改:
df.drop_duplicates(inplace=True)
在 Pandas 中,df.dropna() 方法用于删除 DataFrame 中包含缺失值(NaN)的行或列。
该方法的用法如下:
df.dropna(axis=0, how='any', subset=None, inplace=False)
参数说明:
axis:可选参数,用于指定删除行还是删除列。可选值为0或'index'(默认值),表示删除行;可选值为1或'columns',表示删除列。how:可选参数,用于指定何时删除。可选值为'any'(默认值),表示当某一行或列中包含一个或多个缺失值时删除;可选值为'all',表示只有当一行或列中的所有值都是缺失值时才删除。subset:可选参数,用于指定要考虑的列名列表。默认值为None,表示考虑所有列。inplace:可选参数,表示是否在原始 DataFrame 上进行修改。默认值为False,表示返回处理后的新 DataFrame。
下面是一些示例,以便更好地理解 df.dropna() 的用法:
- 删除包含任何缺失值的行,并返回处理后的新 DataFrame:
df_new = df.dropna()
- 删除指定列中包含缺失值的行,并返回处理后的新 DataFrame:
df_new = df.dropna(subset=['col1', 'col2'])
- 删除包含全部缺失值的行,并在原始 DataFrame 上进行修改:
df.dropna(how='all', inplace=True)
数据离散化
当使用 pd.cut() 函数时,可以根据指定的条件将数据进行划分并创建一个新的分类变量。这个函数可以用于数据分析和数据可视化中的分组操作。
下面是 pd.cut() 的常用参数及用法详解:
pd.cut(x, bins, labels=None, right=True, include_lowest=False, duplicates='raise')
x:要划分的一维数据数组,可以是 Pandas Series、NumPy 数组或 Python 列表。bins:划分的边界值,可以按照以下方式指定:- 整数:表示要划分的区间数量,
pd.cut()函数将自动确定最小和最大值,并根据该数量均匀划分区间。 - 列表或数组:表示各个区间的边界值。例如,[0, 10, 20, 30] 表示将数据划分为小于0、10-20、20-30和大于30四个区间。
- 具有标签的元组列表:表示自定义的区间标签和边界值。例如,[(0, 'A'), (10, 'B'), (20, 'C')] 表示将数据划分为 A、B、C 三个区间。
- 整数:表示要划分的区间数量,
labels:可选参数,用于指定划分后的每个区间的标签。如果不提供,将默认使用整数标签。right:可选参数,表示是否将区间的右边界包含在内。默认为True,即右闭区间。include_lowest:可选参数,表示是否将最小值包含在第一个区间中。默认为False,即不包含最小值。duplicates:可选参数,表示对于边界值是否允许重复。默认为 'raise',表示如果有重复的边界值,则会引发异常。如果设置为 'drop',则会将重复的边界值合并。
pd.cut() 返回的结果是一个 Categorical 类型的数据对象,它代表划分后的区间,包含区间信息和标签。可以将这个对象作为新的一列添加到 DataFrame 中,也可以用于分析和可视化操作。
下面是几个示例,以展示 pd.cut() 函数的用法:
- 根据区间数量划分数据:
import pandas as pd
data = [2, 5, 7, 12, 15, 18, 20, 25, 30]
bins = 3
result = pd.cut(data, bins)
print(result)
输出:
[(1.976, 10.0], (1.976, 10.0], (1.976, 10.0], (10.0, 18.0], (10.0, 18.0], (10.0, 18.0], (18.0, 25.0], (18.0, 25.0], (25.0, 32.0]]
Categories (3, interval[float64]): [(1.976, 10.0] < (10.0, 18.0] < (18.0, 25.0]]
- 根据自定义的区间边界划分数据,指定标签:
import pandas as pd
data = [2, 5, 7, 12, 15, 18, 20, 25, 30]
bins = [0, 10, 20, 30]
labels = ['Low', 'Medium', 'High']
result = pd.cut(data, bins, labels=labels)
print(result)
输出:
[Low, Low, Low, Medium, Medium, Medium, High, High, High]
Categories (3, object): [Low < Medium < High]
- 使用
right=False参数包含左边界:
import pandas as pd
data = [2, 5, 7, 12, 15, 18, 20, 25, 30]
bins = [0, 10, 20, 30]
labels = ['Low', 'Medium', 'High']
result = pd.cut(data, bins, labels=labels, right=False)
print(result)
输出:
[Low, Low, Medium, Medium, Medium, High, High, High]
Categories (3, object): [Low < Medium < High]
[python]数据分析--数据清洗处理case1的更多相关文章
- 小象学院Python数据分析第二期【升级版】
点击了解更多Python课程>>> 小象学院Python数据分析第二期[升级版] 主讲老师: 梁斌 资深算法工程师 查尔斯特大学(Charles Sturt University)计 ...
- Python数据分析【炼数成金15周完整课程】
点击了解更多Python课程>>> Python数据分析[炼数成金15周完整课程] 课程简介: Python是一种面向对象.直译式计算机程序设计语言.也是一种功能强大而完善的通用型语 ...
- 学习推荐《从Excel到Python数据分析进阶指南》高清中文版PDF
Excel是数据分析中最常用的工具,本书通过Python与Excel的功能对比介绍如何使用Python通过函数式编程完成Excel中的数据处理及分析工作.在Python中pandas库用于数据处理,我 ...
- Python数据分析入门与实践 ✌✌
Python数据分析入门与实践 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 这是一个数据驱动的时代,想要从事机器学习.人工智能.数据挖掘等前沿技术,都离不开 ...
- 小白学 Python 数据分析(1):数据分析基础
各位同学好,小编接下来为大家分享一些有关 Python 数据分析方面的内容,希望大家能够喜欢. 人工植入广告: PS:小编最近两天偷了点懒,好久没有发原创了,最近是在 CSDN 开通了一个付费专栏,用 ...
- 小白学 Python 数据分析(11):Pandas (十)数据分组
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 《谁说菜鸟不会数据分析》高清PDF全彩版|百度网盘免费下载|Python数据分析
<谁说菜鸟不会数据分析>高清PDF全彩版|百度网盘免费下载|Python数据分析 提取码:p7uo 内容简介 <谁说菜鸟不会数据分析(全彩)>内容简介:很多人看到数据分析就望而 ...
- 万字长文,Python数据分析实战,使用Pandas进行数据分析
文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...
- python数据分析与可视化【思维导图】
python数据分析与可视化常用库 numpy+matplotlib+pandas 思维导图 图中难免有错误,后期随着学习与应用的深入,会不断修改更新. 当前版本号:1.0 numpy介绍 NumPy ...
- [Python数据分析]新股破板买入,赚钱几率如何?
这是本人一直比较好奇的问题,网上没搜到,最近在看python数据分析,正好自己动手做一下试试.作者对于python是零基础,需要从头学起. 在写本文时,作者也没有完成这个小分析目标,边学边做吧. == ...
随机推荐
- 【NestJS系列】核心概念:Middleware中间件
前言 用过express与koa的同学,对中间件这个概念应该非常熟悉了,中间件可以拿到Request.Response对象和next函数. 一般来讲中间件有以下作用: 执行任何代码 对请求与响应拦截并 ...
- 《CTFshow-Web入门》08. Web 71~80
@ 目录 web71 题解 原理 web72 题解 原理 web73 题解 web74 题解 web75 题解 原理 web76 题解 web77 题解 原理 web78 题解 原理 web79 题解 ...
- 《SQL与数据库基础》10. 存储引擎
目录 存储引擎 MySQL体系结构 存储引擎简介 三种经典存储引擎 InnoDB 逻辑存储结构 MyISAM Memory 区别及特点 存储引擎选择 本文以 MySQL 为例 存储引擎 MySQL体系 ...
- Adapter 适配器模式简介与 C# 示例【结构型1】【设计模式来了_6】
〇.简介 1.什么是适配器模式? 一句话解释: 两个无关联的类,通过实现同一接口或继承对方得到新的适配器类,新的适配器类中通过实现原本类的操作,可达到进行相同的操作的目的. 适配器模式(Apapt ...
- FastDFS入门
一.系统架构 二.构成部分 1.Tracker Server:跟踪服务器,记录文件信息,可单台或集群部署. 2.Storage Server:存储服务器,文件存储位置,分卷或分组部署. 3.Clien ...
- Google Hacking语法总结
Google Hacking语法总结 Google Hacking是利用谷歌搜索的强大,来在浩瀚的互联网中搜索到我们需要的信息.轻量级的搜索可以搜素出一些遗留后门,不想被发现的后台入口,中量级的搜索出 ...
- 3天上手Ascend C编程丨通过Ascend C编程范式实现一个算子实例
本文分享自华为云社区<3天上手Ascend C编程 | Day2 通过Ascend C编程范式实现一个算子实例>,作者:昇腾CANN . 一.Ascend C编程范式 Ascend C编程 ...
- Ds100p -「数据结构百题」41~50
41.P3590 [POI2015]TRZ 给定一个长度为n的仅包含'B'.'C'.'S'三种字符的字符串,请找到最长的一段连续子串,使得这一段要么只有一种字符,要么有多种字符,但是没有任意两种字符出 ...
- 一文教你理解Kafka offset
日常开发中,相信大家都对 Kafka 有所耳闻,Kafka 作为一个分布式的流处理平台,一般用来存储和传输大量的消息数据.在 Kafka 中有三个重要概念,分别是 topic.partition 和 ...
- .Net核心级的性能优化(GC篇)
1.前言 大部分人对于.Net性能优化,都停留在业务层面.或者简单的.Net框架配置层面.本篇来看下.Net核心部分GC垃圾回收配置:保留VM,大对象,独立GC,节省内存等.Net8里面有很多的各种G ...