pandas数据清洗详细教程,python中pandas清洗数据
最近由于工作需要,需要对几十万个商品和订单数据进行初步的数据分析。本文主要围绕熊猫实现数据读取和清洗分析的项目实践,具有一定的参考价值。有兴趣的可以看看。
00-1010 I、数据读写1.1 CSV和txt文件:1.2 Excel文件:1.3 MYSQL数据库:2、数据清理2.1清除不需要的行数据2.2清除不需要的列2.3调整显示顺序或列标签名称2.4对行数据进行排序2.5空值处理2.6重复数据删除2.7指定列数据的初步处理2.8 Data frame中所有数据的初步处理2.9设置数据格式3、数据切片和筛选查询3.1行切片3.2列数据简单统计与汇总4.1数据统计4.2数据分组与汇总最近由于工作需要,需要对数十万条商品和订单数据进行初步的数据分析。一开始尝试用Excel,但是一旦数据量超过10万,Excel和电脑的性能瓶颈就会捉襟见肘。为了后续遇到类似问题,提高处理效率,我抽空系统研究了熊猫库。入门之后,感觉以后处理千万级数据的时候,就能游刃有余了。不想多说,直接进入正题。
本文主要沿着熊猫日常数据处理的步骤来讲解熊猫对应的知识点和常用操作。分析工具是jupyter-notebook,强烈推荐。
本文假设对熊猫有基本的了解,核心概念是Series和data frame(numpy库不知道)。
目录
第一步,从股票数据源读取数据,然后写入分析后的数据并永久保存。这是数据分析的开始和结束,这里一起解释。主要只是讲解了常用的读写方法,其他的可以自己去学习和了解。
一、数据读取和写入
进口熊猫作为pd
文件路径读取=
文件路径写入=
#读取csv或txt文件中的数据,下面只列出常用的参数。
df=pd.read_csv(
File_path_read,#指定要读取或写入的文件的路径,可以是相对路径或绝对路径
Sep=,,#指定分隔符
Encoding=utf-8,#指定字符编码格式。
Usecols=None,#指定要读入的列,列表格式可以是index [1,2,3]或list [A , B , C]
Names=[A , B , C],#可以自定义读入数据的列标签。
Skip_blank_lines=True,#设置是否跳过内容为空的行。
Nrows=1000,#指定读入的行数
Skiprows=[2,5],#指定要跳过的行数。
DTYPE={0:STR, B 3360 Float64}) #指定列数据读取的格式,可以为每列指定。
#将分析的数据写入csv或txt文件。
文件路径写
1.1 CSV和txt文件:
进口熊猫作为pd
文件路径读取=
文件路径写入=
#从数据源读取数据,同时指定读入数据的格式,或者不指定。看完是标准的数据帧。
#其他常用参数,与read_csv一致,此处不再赘述。
df=PD . read _ excel(file _ path _ read,encoding=utf-8,usecols=None,names=[A , B , C],skip_blank_lines=True,nrows=1000,skiprows=[2,5],dtype={0:str,2: float64 })
#将分析后的数据写入Excel,同时指定写入数据的格式,或者不指定。
df。
to_excel(file_path_write , dtype=str)
1.3 MYSQL数据库:
import pandas as pd
二、数据清洗
2.1 清除不需要的行数据
一般数据源都是csv、txt 或者excel,此时可能源数据内就包含大量异常或不想要的行数据,如果不进行清除,则会严重影响后续数据分析的准确性
当然,如果数据源是mysql等数据库,则可在读取数据的时候,即通过slq命令,将异常或不想要的数据给过滤掉。
2.1.1 清除满足指定条件的行数据
#清除满足指定条件的行数据的表达式
2.1.2 清除指定的行数据
如果数据源是mysql等数据库,可直接在sql语句中添加筛选条件,不过在分析过程中,可能也需要清除指定的行数据。
#清除指定的行
2.2 清除不需要的列
如果数据源是mysql等数据库,则其实可以在sql语句中,只拉取自己需要的列,如果是从csv或Excel读取,也可在读取数据时,就指定对应需要的列
不过在实际数据分析时,可能在分析过程中产生了新的DataFrame,此时可能需要清除不需要的列。
#执行删除操作时,原df不会变化,一般是返回一个新的DataFra
2.3 调整列的展示顺序或列标签名
这个步骤一般是为了方便自己观察数据,或者在数据分析接近尾声时,为增强数据可读性,对列的顺序进行调整
#语句如下,使用reindex函数
2.4 对行数据进行排序
此处也是为了在进行数据分析时观察数据,或者增强输出的数据的可读性
2.4.1 sort_values()
即按照实际的数据值进行排序
#df.sort_values()函数
2.4.2 sort_index()
#df.sort_index()函数
2.5 空值的处理
一般导入的数据,会存在空值的情况,为了避免此类数值影响后续的数据分析,一般需要进行相应的处理
#1、对空值直接清除
2.6 数据去重处理
一般源数据可能会在某列存在重复数据的问题,为方便后续处理等,可能需要进行去重
#删除重复行时,需要用到drop_duplicates函数
2.7 对指定列数据进行初步加工
#1、map()函数
2.8 对DataFrame内所有数据进行初步加工处理
此种方法不太常用,或者可以作为填充默认值的方式,比如将NAN的值填充为0
#以下会对DataFrame每个元素应用一次指定的函数,并将返回值作为新的值
2.9 设置数据格式
一般在后续数据处理时,或者在数据处理基本宣告尾声时,为增强数据可读性或者分析的方便,需要对数据设置格式
#以下主要演示对某df内某列数据进行常见的数字格式设置
三、数据切片和筛选查询
一般需要对清洗后的数据,按照具体数据分析的需求,提取部分数据并进行进一步的分析,这个时候就需要对数据进行进一步切片或查询筛选,找出自己想要的具体数据集
3.1 行切片
提取指定的行,一般是由行索引组成的列表,即提取指定的某行或某几行
#1、直接使用索引
3.2 列切片
提取指定的一列或多列,一般使用列标签或列索引进行提取
df[colname] #直接提取指定单列标签的列数据
3.3 数据筛选和查询
按照一定的条件,对数据进行筛选和查询,找出自己想要的数据记录(行)
3.3.1 快速筛选
一般在导入数据或数据分析时,如果数据量过大,希望能摘出几行,看下数据表现是否正常
df.head(n) #展示前n行,默认5
3.3.2 条件筛选和查询
本质和sql查询较为相似
#通过逻辑运算来取数据子集,查询和筛选出列值满足指定条件的行数据
3.3.3 正则过滤
使用正则表达式,过滤某指定列的值
df.filter(regex=string)#其中string为正则表达式
3.4 遍历
不建议使用,因为效率比较低,一般使用pandas内置的一些函数满足类似需求
3.4.1 行遍历
用于分析每一行的数据并进行遍历,比如发现某一行数据的对应列值是否满足条件
#逐行打印数据,使用iloc
3.4.2 列遍历
#逐个打印df中的每一列,使用df
3.4.3 DataFrame所有数据遍历
#使用loc
四、数据简单统计和聚合
4.1 数据统计
4.1.1 指定列数据统计分析
#常见统计数据值
4.1.2 各列相关度分析
#协方差--相关度系数
4.2 数据分组和聚合
4.2.1 指定列快速分组和聚合
一般情况下,希望对某列,比如国家等,对数据进行分组并快速知道每个国家对应数据记录的数量,然后进行快速预览
#先按照A列的值,对数据进行分组,然后计算出每个分组的数据记录数量
4.2.2 分组
常见的数据分析中,一般是对数据按照行或列进行分组,然后进一步对分组数据,按照分组进行求和、计数、求平均值、均方差等聚合,或者用自定义的函数进行进一步的分析
#分组使用groupby函数,分组之后,得到一个DataFrameGroupBy对象,后续可对该对象进行聚合
4.2.3 聚合
4.2.3.1 常见聚合函数
gp=df.groupby(A)
4.2.3.2 自定义聚合函数
#对某分组后的对象使用自定义的聚合函数,需要用到agg()函数
4.2.3.3 应用多个聚合函数
#对某次分组对象,一次性应用多个聚合函数
4.2.3.4 将聚合结果与原始数据合并
#1、使用merge函数进行连接合并
4.2.3.5 数据透视图
了解了数据的分组和聚合之后,再了解pandas的数据透视图,会更加直观易懂,并且当使用习惯了透视图之后,会发现,可能大多数情况下,就不再需要groupby了,而是直接使用pivot_table函数,因为更加直观、高效
下图是数据透视图函数工作示意:
#类似Excel的数据透视图,pandas可对数据快速生成你想要的数据透视图,以快速发现数据相关有趣的特征
后续文章再详细展开数据的合并及可视化,数据的合并类似sql中的原理
到此这篇关于pandas实现数据读取&清洗&分析的项目实践的文章就介绍到这了,更多相关pandas 数据读取&清洗&分析内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。