Pandas数据处理---数据的读写、数据清洗、数据过滤、数据转换(映射、替换、字符串矢量级运算)、数据合并详细总结

本文详述Pandas的五大核心操作:数据读写,包括读取CSV、Excel、SQL数据;数据清洗,涉及缺失值、重复值和异常值处理;数据过滤,展示如何利用条件筛选数据;数据转换,涵盖映射、替换和字符串运算;以及数据合并,使用concat、append、merge和join方法。每个主题都配有实例解析和代码演示。
摘要由CSDN通过智能技术生成

该文从Pandas的数据的读写、数据清洗、数据过滤、数据转换(映射、替换、字符串矢量级运算)、数据合并等都进行了详细的总结和案例说明,是pandas的核心重点知识。

目录

一、数据读写处理文档

1.1、pandas数据的加载+写入

1.2、pandas写出数据到内存

二、数据清洗

2.1、缺失值处理

发现缺失值

丢弃缺失值

填充缺失值

2.2、重复值处理

发现重复值

删除重复值

2.3、无效值处理

检测无效值

三、数据过滤¶

四、数据转换(映射、替换、字符串矢量级运算)

4.1、应用 apply、map、applymap映射转换

Series的s.apply(function)转换

Series的s.map(map_series)

DataFrame调用apply,列级别的转换,df[[0, 1,...]].apply(function)

DtaFrame调用applymap:通过函数实现元素级的映射转换。

4.2、替换

4.3、字符串矢量级运算

五、数据合并

concat()

append()

merge()

join()


一、数据读写处理文档

1.1、pandas数据的加载+写入

我们常用的数据加载函数为(点击下划线部分跳转到详细文档):

  • read_csv :读取普通文件默认","分割,但可以指定为其他分隔符,如.csv .txt文件等
  • read_table :读取以‘/t’分割的文件到DataFrame 
  • read_sql :读取数据库数据,如mysqloracle数据库等
  • read_excel :读取excel文件
  • to_csv:写入csv文件
  • to_sql: 写入sql数据库
  • to_excel: 写入excel文件
  • ......

说明:

  • read_csv与read_table默认使用的分隔符不同。通常情况下我们直接使用read_csv代替read_table

加载+写入csv/tsv/:https://blog.csdn.net/weixin_41685388/article/details/103768116 

加载+写入txt:https://blog.csdn.net/weixin_41685388/article/details/103787971

加载+写入excel:https://blog.csdn.net/weixin_41685388/article/details/103773622

加载+写入mysql:https://blog.csdn.net/weixin_41685388/article/details/103770964

加载+写入oracle:https://blog.csdn.net/weixin_41685388/article/details/103791970

pandas官方手册:https://pandas.pydata.org/pandas-docs/stable/

pandas中文手册:https://www.pypandas.cn/docs/user_guide/io.html#io-sql

1.2、pandas写出数据到内存

# to_csv 不仅可以写入硬盘文件中,也可以写入内存(类文件对象)中。【处理速度更快,性能更好】
# 类文件对象:像文件那样具有read,write等功能的对象。

# StringIO 处理文本类型,如果是文本格式,都是字符串类型可解析
# BytesIO 处理二进制类型,如果是图片,视频,音频等,都是二进制格式。没法使用字符串来解析
from io import StringIO, BytesIO
# 创建一个类文件对象
str_io = StringIO()
df.to_csv(str_io)

# 查看文件指针的位置
display(str_io.tell())

# 调整文件指针的位置。将指针调整到文件的最前端。
str_io.seek(0)
display(str_io.read())

# 可以调用getvalue方法取出StringIO对象中的数据。(不用调整指针,再去读取)
display(str_io.getvalue())
print(str_io.getvalue())

二、数据清洗

数据清洗主要包含以下几方面内容:

  • 处理缺失值
  • 处理重复值
  • 处理异常值

准备数据,并读取数据:

import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings("ignore")

df = pd.read_csv(r"spider.csv", header=None)
display(df.sample(5))  #随机抽样df.head(n)/df.tail(n) #抽取前/后n行
display(df.shape,df.shape[0],df.shape[1])  #查看总的有n行,m列,这里有1369行,5列

2.1、缺失值处理

发现缺失值

Pandas中,会将float类型的nan与None视为缺失值,我们可以通过如下方法来检测缺失值:

  • info()
  • isnull()
  • notnull()

说明:

  • 判断是否存在空值,可以将isnull与any或all结合使用。

检测整体缺失值情况 df.info()

print(df.shape)
# 按照列来检测缺失值,首先可以调用info方法进行整体查看。
# info方法可以显示DataFrame中每列的相关信息。
print(df.info())  

判断空值的情况

print(df.isnull().any()) #按列检查每列是否有至少一个空
print(df[[3,4]].isnull().any()) #检查指定列是否有至少一个空

print(df.notnull().all()) #按列检查每列是否全部不为空
print(df[[3,4]].notnull().all())  #按列检查指定列是否全部不为空

    

丢弃缺失值

df.dropna(axis=0/1,inplace=True/False,how='any' / how='all' / thresh=n)

说明:

  • axis:指定丢弃行或者丢弃列(默认为丢弃行axis = 0)。axis = 0 / axis = 1
  • inplace:指定是否就地修改,默认为False。 是否就地操作
  • how:指定dropna丢弃缺失值的行为,默认为any(只要存在就删除)。all (该行(列)全部为空才删除)/ any
  • thresh:当非空数值达到该值时,保留数据,否则删除。如 thresh = 3,弥补how的不足(与how不同时使用)

df = pd.read_csv("spider.csv", header=None)
display(df.head())

# 处理空值。丢弃空值,使用dropna。
df1 = df.dropna() #默认<=>df2,# 这个行为表示: 把df中的 有缺失字段值的任意一行都删掉,但不使用就地删除
# <=> df2 = df.dropna(axis=0,inplace=False,how='any')
df1.info()   #处理后df1已经删除了有空值的行
df.info()    #由于inplace=False,所以df不变,后续继续处理和运算使用df1

df = pd.read_csv("spider.csv", header=None)
#display(df.head())

df1 = df.dropna(axis=0,inplace=False,thresh=4) #4个及以上字段不为空,则保留,否则删除
print(df.info())  
print(df1.shape)
print(df1.info())

 

填充缺失值

df.fillna(value / method ='ffill' [,limit=n] / method='bfill' [,limit=n] ,[inplace=True/False])

说明:

  • value:填充所使用的值。固定值填充,支持直接输入值,支持字典,支持Series,需要注意的是字典的key值,Series的index要与df的列名称对应。
  • method:指定前值(上一个有效值)填充(pad / ffill),还是后值(下一个有效值)填充(backfill / bfill)。
  • limit:如果指定method,表示最大连续NaN的填充数量,如果没有指定method,则表示最大的NaN填充数量。
  • inplace:指定是否就地修改,默认为False。

这些参数都很常用,联合起来控制进行替换的规则

df = pd.read_csv("spider.csv", header=None)
display(df.head())
df_mean = round(df.mean(),2)  #计算每列的均值
display(df_mean,type(df_mean))
#固定值填充,支持直接输入值,支持字典,支持Series,
#需要注意的是字典的key值,Series的index要与df的列名称对应
df1 = df.fillna(df_mean) 
display(df1.head())

df = pd.read_csv("spider.csv", header=None)
display(df[18:22])
#向下填充
df1 = df.fillna(method="ffill",inplace=False)
display(df1[18:22])
#向上填充
df2 = df.fillna(method='bfill',inplace=False)
display(df2[18:22])

# limit参数。如果指定method,则表示最多连续填充。
# 如果没有指定method,则表示总共填充。
df3 = df.fillna(method="bfill", limit=1)
display(df3[18:22])

2.2、重复值处理

在处理数据中,可能会出现重复的数据,我们通常需要将重复的记录删除。

df = pd.read_csv("spider.csv", header=None)   #导入数据
display(df.head())

发现重复值

我们可以通过duplicated方法来发现重复值。该方法返回Series类型的对象,值为布尔类型,表示是否与上一行重复。

r = df[df.duplicated( [subset=[0,1,...],keep='first'/'last'/False)] )]

display(r.sort_values([1,0,...], axis=0))

参数说明:

  • subset:指定依据哪些列判断是否重复,默认为所有列。
  • keep:指定记录被标记为重复(True)的规则。默认为first。

#默认不加参数的情况

# 检测重复值,, 这个函数的作用个,就是把每一行都映射成一个True或者false的结果
# 如果结果为True 表示: 这一行跟某一行重复了。默认全部字段重复才算重复
display(df.duplicated().sample(5))
display(df[df.duplicated()])  #这样输出的只是判断为True行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值