Pandas数据分析库学习

Pandas

pannel面板数据 + data + analysis

也就是一个数据处理工具

  • 基础处理
    • Pandas是什么,为什么用
      • 便捷的数据处理能力
      • 读取文件方便
      • 封装了Matplotlib、NumPy的画图和计算
    • 核心数据结构
      • DataFrame、Pannel、Series
    • 基本操作
      • 索引操作
      • 赋值操作
      • 排序
    • 运算
    • 画图
    • 文件的读取与存储
  • 高级处理
    • 处理缺失值
    • 数据离散化
    • 合并
    • 交叉表与透视表
    • 分组与聚合

基础处理

🐱Pandas核心数据结构

一🐈.DataFrame(二维)

Series的容器

结构(创建)

既有行索引,又有列索引的二维数组(让数据更有意义的显示)

import pandas as pd
数组名=pd.DataFrame(数组名)
  • 行索引 index
  • 列索引 columns
import numpy as np
import pandas as pd
#创建这个数据
stock_change=np.random.normal(0,1,(10,5))
#print(stock_change)
#原来—————————————————
#加上行列索引,但是它现在就是数字,没有意义
#stock_change=pd.DataFrame(stock_change)
#print(stock_change)
#————————————————————
#创建行索引
stock=["股票{}".format(i) for i in range(10)]
#创建列索引
date=pd.date_range(start='20230101',periods=5,freq='B')
#添加进去
stock_change=pd.DataFrame(stock_change,index=stock,columns=date)
print(stock_change)

这样就会得到:

属性
  • shape
  • index
  • columns
  • values(直接获取其中array的值)
  • T(转置)
方法
  • head
  • tail

返回的是前几行,或后几行

修改行列索引值的注意事项:
  1. 修改行列索引值
  • 修改行或列的索引值就必须整体修改,不能单独修改某行或者某列
  1. 重设索引
  • reset_index(drop=False)
    • 设置新的下标索引
    • drop:默认为False,不删除原来索引,如果为True就是删除原来的索引值
  1. 设置索引
  • 区别于上面设置行列的方法,还可以用字典来创建dataframe
  • set_index(keys,drop=True)
    • keys:列索引名称或列索引名称列表
    • drop:boolean,default,True当作新的索引,删除原来的列
  • 通过这样的设置,dataframe就变成了一个具有MultiIndex的dataframe

二🐈.MultiIndex(三维)

多级或分层索引对象

  • index属性
    • names:levels的名称
    • levels:每个level的元组值

直接打点访问即可

二🐈.Pannel(三维)

存储 三维 数组的面板结构的,dataframe的 容器 pd.Pannel()

三🐈.Series(一维)

  • 带索引的一维数组
  • series结构只有行索引
创建

pd.Series()

属性
  • index
  • values

🐱基本数据操作

索引操作

  • 直接索引
    • dataframe不支持直接这样数字索引 数组[行,列]
    • 正确的应该是先列后行数组["列"]["行"]
  • 按名字索引
    • 数组名.loc["行"]["列"]先行后列
    • 数组名.loc["行","列"]
  • 按数字索引
    • 数组名.iloc[行,列]
  • 组合索引
    • 可以数字和名字混用
    • 使用ix

赋值操作

# 直接修改原来的值
data['close']=1
#或者
data.close=1

排序

两种形式,可对dataframe或者series排序

对DataFrame

  • 对内容进行排序(列)
    • 名.sort_values(key=,ascending=)
      • key 就是指按哪一列排序,(也可以传个列表,按多键进行排序)
      • ascending=True 升序,False 降序
  • 对索引进行排序(行)
    • 名.sort_index(),从小到大

对Series

  • 对内容进行排序
  • 名.series.sort_values(ascending=)
    • 只有一列,所以不需要参数
  • 对索引进行排序
    • 名.series.sort_index(),从小到大

🐱DataFrame运算

算术运算

    • 数组名["列名"].add(数字),add这个后面可以打点head,而下面这个是不可以的
    • 数组名["列名"]+数字
  • sub()减
  • 也可以直接对数组名运算,作用对象就是每个数据

逻辑运算

  • 运算符:<、>、|、&
  • 逻辑运算函数
    • 数组名.query(“expr”) ,expr:查询字符串
    • 数组名.isin(values),判断一组数据中是否有某些值

统计运算

  • data数组名.describe(),得到的是值
    • describe可以直接得到所有统计结果count、mean、std、var、min、max、median
    • 如果只需要其中一个的话,单独打点(axis=0按列/按1行)就可以,默认=0按列
  • 如果获取最值的位置的话用数组名.idxmax()数组名.idxmin(),axis默认为0,即按列
  • 累计统计函数
    • cumsum,计算前n个数之和
    • cummax,计算前n个数最大值
    • cummin,计算前n个数最小值
    • cumprod,计算前n个数的乘积

自定义运算

apply(func,axis=0),func为自定义函数

🐱Pandas画图

  • DataFrame画图
    • DataFrame.plot(x=None,y=None,kind=’line‘)
      • x,y轴
      • line plot折线图、bar树状图、hist直方图、pie饼图、scatter散点图
      • stacked是否堆叠,填布尔值
  • Series画图
    • .plot(),可以画折线图,记得需要导入
import matplotlib.pyplot as plt

🐱csv(文本)文件的读取与存储

🐱HDF5(二进制)文件的读取与存储

HDF5可以存储三维数据的文件

🐱JSON(文本)文件的读取与存储

高级处理

缺失值处理

这是之前NumPy里出现过的问题,用pandas解决更为便捷,直接.mean()就可以求得

如何处理nan

  • 1.判断数据中是否存在缺失值
    • pd.isnull(df),有缺失值就返回true
    • pd.notnull(df),有缺失值就返回false
  • 2.如果缺失值是nan
    • 直接删除:df.dropna(axis='rows'inplace=True)
      • 默认按行删除
      • true就是原地删除,false不改变原来,而是返回一个新的df。默认是false
    • 替换/插补:df.fillna(value,inplace=True)
      • value就是要填补的值
      • inplace
  • 3.当缺失值不是nan,而是一些有默认标记的,比如说问号…
    • 处理思路就是:
      • 先将它转成nan形式:df.replace(to_replace=’?‘,value=np.nan)
      • 再处理nan

数据离散化

是什么

而上面这种的表现形式,我们叫做one-hot编码,也叫哑变量

如何实现数据的离散化

  1. 对数据进行分组
  • 自动分组:sr=pd.qcut(data,bins组数)
  • 自定义分组:sr=pd.cut(data,bins),bins传一个列表,里面放分界值
  • 对数据进行分组,一般会与value_counts搭配使用
    • series.value_counts(),统计分组次数
  1. 对分好组的数据求哑变量
  • pandas.get_dummies(sr,prefix=前缀)

合并

按方向合并

pd.concat([data1,data2],axis=0竖直)

按索引合并

pd.merge(left,right,how="inner内连接",on=[索引])
inner内连接,outer外连接,left左连接,right右连接

这是内连接

交叉表和透视表

找到/探索两个变量之间的关系

交叉表:用于计算一列数据对于另外一列数据的分组个数(寻找两个列之间的关系)

pd.crosstab(value1,value2)

透视表
df.pivot_table([],index=[])

分组与聚合

分组和聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况

分组+聚合:

key(by)表示按哪一个列分组

比如对颜色分组,对price聚合

  • df方式df.groupby(by="color")["price"].max()
  • sr方式col["price"].groupby(col["color"]).max()
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值