该文从Pandas的数据的读写、数据清洗、数据过滤、数据转换(映射、替换、字符串矢量级运算)、数据合并等都进行了详细的总结和案例说明,是pandas的核心重点知识。
目录
DataFrame调用apply,列级别的转换,df[[0, 1,...]].apply(function)
DtaFrame调用applymap:通过函数实现元素级的映射转换。
一、数据读写处理文档
1.1、pandas数据的加载+写入
我们常用的数据加载函数为(点击下划线部分跳转到详细文档):
- read_csv :读取普通文件默认","分割,但可以指定为其他分隔符,如.csv 、 .txt文件等
- read_table :读取以‘/t’分割的文件到DataFrame
- read_sql :读取数据库数据,如mysql、oracle数据库等
- 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:当非空数值达到该值时&