数据预处理案例1

主要涉及pandas读取csv文件,缺失值和重复值处理,分组计数,字段类型转换 ,结果写入到Excel。


根据要求对CSV数据集进行处理要求如下:

  • 保留数据关键信息:time、latitude、longtitude、depth、mag、region

    • 注意其中的 region 未直接提供,需要从数据集中的place中获取。
    • 特别说明例如:place76km 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() 的用法:

  1. 删除所有列中的重复行,并返回处理后的新 DataFrame:
df_new = df.drop_duplicates()
  1. 只考虑某些列的重复行,并返回处理后的新 DataFrame:
df_new = df.drop_duplicates(subset=['col1', 'col2'])
  1. 删除所有列中的重复行,并在原始 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() 的用法:

  1. 删除包含任何缺失值的行,并返回处理后的新 DataFrame:
df_new = df.dropna()
  1. 删除指定列中包含缺失值的行,并返回处理后的新 DataFrame:
df_new = df.dropna(subset=['col1', 'col2'])
  1. 删除包含全部缺失值的行,并在原始 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() 函数的用法:

  1. 根据区间数量划分数据:
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]]
  1. 根据自定义的区间边界划分数据,指定标签:
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]
  1. 使用 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的更多相关文章

  1. 小象学院Python数据分析第二期【升级版】

    点击了解更多Python课程>>> 小象学院Python数据分析第二期[升级版] 主讲老师: 梁斌 资深算法工程师 查尔斯特大学(Charles Sturt University)计 ...

  2. Python数据分析【炼数成金15周完整课程】

    点击了解更多Python课程>>> Python数据分析[炼数成金15周完整课程] 课程简介: Python是一种面向对象.直译式计算机程序设计语言.也是一种功能强大而完善的通用型语 ...

  3. 学习推荐《从Excel到Python数据分析进阶指南》高清中文版PDF

    Excel是数据分析中最常用的工具,本书通过Python与Excel的功能对比介绍如何使用Python通过函数式编程完成Excel中的数据处理及分析工作.在Python中pandas库用于数据处理,我 ...

  4. Python数据分析入门与实践 ✌✌

    Python数据分析入门与实践 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 这是一个数据驱动的时代,想要从事机器学习.人工智能.数据挖掘等前沿技术,都离不开 ...

  5. 小白学 Python 数据分析(1):数据分析基础

    各位同学好,小编接下来为大家分享一些有关 Python 数据分析方面的内容,希望大家能够喜欢. 人工植入广告: PS:小编最近两天偷了点懒,好久没有发原创了,最近是在 CSDN 开通了一个付费专栏,用 ...

  6. 小白学 Python 数据分析(11):Pandas (十)数据分组

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  7. 《谁说菜鸟不会数据分析》高清PDF全彩版|百度网盘免费下载|Python数据分析

    <谁说菜鸟不会数据分析>高清PDF全彩版|百度网盘免费下载|Python数据分析 提取码:p7uo 内容简介 <谁说菜鸟不会数据分析(全彩)>内容简介:很多人看到数据分析就望而 ...

  8. 万字长文,Python数据分析实战,使用Pandas进行数据分析

    文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  9. python数据分析与可视化【思维导图】

    python数据分析与可视化常用库 numpy+matplotlib+pandas 思维导图 图中难免有错误,后期随着学习与应用的深入,会不断修改更新. 当前版本号:1.0 numpy介绍 NumPy ...

  10. [Python数据分析]新股破板买入,赚钱几率如何?

    这是本人一直比较好奇的问题,网上没搜到,最近在看python数据分析,正好自己动手做一下试试.作者对于python是零基础,需要从头学起. 在写本文时,作者也没有完成这个小分析目标,边学边做吧. == ...

随机推荐

  1. 【NestJS系列】核心概念:Middleware中间件

    前言 用过express与koa的同学,对中间件这个概念应该非常熟悉了,中间件可以拿到Request.Response对象和next函数. 一般来讲中间件有以下作用: 执行任何代码 对请求与响应拦截并 ...

  2. 《CTFshow-Web入门》08. Web 71~80

    @ 目录 web71 题解 原理 web72 题解 原理 web73 题解 web74 题解 web75 题解 原理 web76 题解 web77 题解 原理 web78 题解 原理 web79 题解 ...

  3. 《SQL与数据库基础》10. 存储引擎

    目录 存储引擎 MySQL体系结构 存储引擎简介 三种经典存储引擎 InnoDB 逻辑存储结构 MyISAM Memory 区别及特点 存储引擎选择 本文以 MySQL 为例 存储引擎 MySQL体系 ...

  4. Adapter 适配器模式简介与 C# 示例【结构型1】【设计模式来了_6】

    〇.简介 1.什么是适配器模式? 一句话解释:   两个无关联的类,通过实现同一接口或继承对方得到新的适配器类,新的适配器类中通过实现原本类的操作,可达到进行相同的操作的目的. 适配器模式(Apapt ...

  5. FastDFS入门

    一.系统架构 二.构成部分 1.Tracker Server:跟踪服务器,记录文件信息,可单台或集群部署. 2.Storage Server:存储服务器,文件存储位置,分卷或分组部署. 3.Clien ...

  6. Google Hacking语法总结

    Google Hacking语法总结 Google Hacking是利用谷歌搜索的强大,来在浩瀚的互联网中搜索到我们需要的信息.轻量级的搜索可以搜素出一些遗留后门,不想被发现的后台入口,中量级的搜索出 ...

  7. 3天上手Ascend C编程丨通过Ascend C编程范式实现一个算子实例

    本文分享自华为云社区<3天上手Ascend C编程 | Day2 通过Ascend C编程范式实现一个算子实例>,作者:昇腾CANN . 一.Ascend C编程范式 Ascend C编程 ...

  8. Ds100p -「数据结构百题」41~50

    41.P3590 [POI2015]TRZ 给定一个长度为n的仅包含'B'.'C'.'S'三种字符的字符串,请找到最长的一段连续子串,使得这一段要么只有一种字符,要么有多种字符,但是没有任意两种字符出 ...

  9. 一文教你理解Kafka offset

    日常开发中,相信大家都对 Kafka 有所耳闻,Kafka 作为一个分布式的流处理平台,一般用来存储和传输大量的消息数据.在 Kafka 中有三个重要概念,分别是 topic.partition 和 ...

  10. .Net核心级的性能优化(GC篇)

    1.前言 大部分人对于.Net性能优化,都停留在业务层面.或者简单的.Net框架配置层面.本篇来看下.Net核心部分GC垃圾回收配置:保留VM,大对象,独立GC,节省内存等.Net8里面有很多的各种G ...