当前位置: 首页 > news >正文

【Python】Pandas(学习笔记)

一、Pandas概述

1、Pandas介绍

2008年WesMcKinney开发出的库,专门用于数据挖掘的开源python库

以Numpy为基础,借力Numpy模块在计算方面性能高的优势

基于matplotib,能够简便的画图

独特的数据结构

import pandas as pd

2、Pandas优势

  • 便捷的数据处理能力
  • 读取文件方便
  • 封装了Matplotlib、Numpy的画图和计算

二、数据类型

1、DataFrame

1)结构

既有行索引、又有列索引的二维数组

  • 行索引,表明不同行,横向索引,叫index
  • 列索引,表明不同列,纵向索引,叫columns

2)初识

import numpy as np
import pandas as pd
stock = np.random.normal(0, 1, (10,5))
hang = ["股票{}".format(i) for i in range(10)] 
lie = pd.date_range(start="20180101", periods=5, freq="B")df = pd.DataFrame(stock, index=hang, columns=lie)
df.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3)属性

属性属性名
shape形状
index行索引列表
columns列索引列表
values直接获取其中 array 的值
T行列转置

4)方法

# 开头几行(默认5)
df.head(n)
# 最后几行
df.tail(n)

5)索引的设置

1. 修改行列索引值

不能单独修改索引

stock_ = ["股票_{}".format(i) for i in range(10)]
data.index = stock_

2. 重设索引

把原始索引删除(True)或当成普通列(False),重设索引

data.reset_index()
data.reset_index(drop=True)		# drop=True把之前的索引删除

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3. 设置新索引
df1 = pd.DataFrame({'month': [1, 4, 7, 10],'year': [2012, 2014, 2013, 2014],'sale':[55, 40, 84, 31]})
# 以月份设置新的索引
df1.set_index("month", drop=True)
# 设置多个索引,以年和月份
df1.set_index(["year", "month"])

2、MultiIndex

多级或分层索引对象

  • names:levels 的名称
  • levels:每个 level 的元组值
df2.index
df2.index.names
df2.index.levels

3、Panel

存储三维数组的容器

Panel 是 DataFrame 的容器 => 每个维度都是一个DataFrame

注:Pandas 从版本 0.20.0 开始弃用,推荐的用于表示 3D 数据的方法是 DataFrame 上的 MultiIndex 方法

4、Series

带索引的一维数组

DataFrame 是 Series 的容器

sr = data.iloc[1, :]# 索引
sr.index
# 值
sr.values

三、数据操作

1、索引操作

# 直接索引 必须先列后行
data["open"]["2018-02-26"]# 按名字索引
data.loc["2018-02-26"]["open"]
data.loc["2018-02-26", "open"]# 数字索引
data.iloc[1, 0]# 组合索引
data.loc[data.index[0:4], ['open', 'close', 'high', 'low']]

2、赋值操作

data.open = 100
data.iloc[1, 0] = 120

3、排序操作

1)内容排序

# 单列内容排序
# ascending=False:降序、True:升序
data.sort_values(by="open", ascending=False)# 多个列内容排序
data.sort_values(by=["open", "high"], ascending=False).head()

2)索引排序

data.sort_index()

四、DataFrame运算

1、算术运算

data["open"] + 3
data["open"].add(3)data.sub(100)
data - 100data["close"] - data["open"]
data["close"].sub(data["open"])

2、逻辑运算

data[data["p_change"] > 2]
data[(data["p_change"] > 2) & (data["low"] > 15)]# query(expr) expr:查询字符串
data.query("p_change > 2 & low > 15")
# isin(values) 判断是否为 values
data[data["turnover"].isin([4.19, 2.39])]

3、统计运算

describe()综合分析:能够直接得出很多统计结果,count,mean,std,min,max 等

data.describe()	# 综合分析
data.max()		# 最大值
data.idxmax() 	# 最大值位置

4、累计统计函数

  • cumsum 计算前 1/2/3/…/n 个数的和
  • cummax 计算前 1/2/3/…/n 个数的最大值
  • cummin 计算前 1/2/3/…/n 个数的最小值
  • cumprod 计算前 1/2/3/…/n 个数的积
data["p_change"].sort_index().cumsum()
data["p_change"].sort_index().cumsum().plot()

5、自定义运算

apply(func, axis=0)
  • func:自定义函数
  • axis=0:默认按列运算,axis=1:按行运算
data.apply(lambda x: x.max() - x.min())

五、Pandas画图

1、DataFrame

DataFrame.plot(x=None, y=None, kind='line')
  • x: 标签或位置,默认为“无”
  • y: 标签、位置或标签列表、位置。默认无标签
    • 允许打印一列与另一列
  • kind: str
    • ‘line’: 折线图(default)
    • ''bar": 条形图
    • “barh”: 水平条形图
    • “hist”: 直方图
    • “pie”: 饼图
    • “scatter”: 散点图
data.plot(x="volume", y="turnover", kind="scatter")

2、Series

sr.plot()

六、文件读取与存储

1、读取CSV

# 读取数据表,并指定读哪些列
data = pd.read_csv("./stock_day/stock_day.csv", usecols=["high", "low", "open", "close"])# 如果数据表的列没有列名,用names传入列名
data = pd.read_csv("stock_day2.csv", names=["open", "high", "close"]) 

2、保存CSV

# 保存open列的数据
data[:10].to_csv("test.csv", columns=["open"]) # index=False不要行索引
# header=False不要列索引
# mode="a"追加模式|mode="w"重写
data[:10].to_csv("test.csv", columns=["open"], index=False, mode="a", header=False) 

相关文章:

  • 大数据毕业设计选题推荐-机房信息大数据平台-Hadoop-Spark-Hive
  • 学习王阳明知行合一随录
  • yolov5模型代码怎么修改
  • 【ArcGIS处理】行政区划与流域区划间转化
  • C语言编程陷阱(三)
  • 此芯科技加入绿色计算产业联盟,参编绿色计算产业发展白皮书
  • Ansys Electronics Desktop仿真——HFSS线圈寄生电阻,电感
  • 本地开发环境和服务器传输数据的几种方法
  • vue3路由
  • 基础框架代码解释
  • mybatis之主键返回
  • Spring Task使用介绍
  • 云ES容灾方案
  • 深度学习YOLOv5车辆颜色识别检测 - python opencv 计算机竞赛
  • 2023大厂高频面试题之CSS篇(2)
  • 2018一半小结一波
  • HTML中设置input等文本框为不可操作
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java比较器对数组,集合排序
  • JDK 6和JDK 7中的substring()方法
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • KMP算法及优化
  • node 版本过低
  • Octave 入门
  • PAT A1092
  • Phpstorm怎样批量删除空行?
  • QQ浏览器x5内核的兼容性问题
  • Vue.js源码(2):初探List Rendering
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 官方解决所有 npm 全局安装权限问题
  • 基于游标的分页接口实现
  • 经典排序算法及其 Java 实现
  • 开源地图数据可视化库——mapnik
  • 前端
  • 山寨一个 Promise
  • 无服务器化是企业 IT 架构的未来吗?
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一天一个设计模式之JS实现——适配器模式
  • 移动端 h5开发相关内容总结(三)
  • 用element的upload组件实现多图片上传和压缩
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​520就是要宠粉,你的心头书我买单
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #《AI中文版》V3 第 1 章 概述
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #pragma 指令
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (4)STL算法之比较
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (轉貼) UML中文FAQ (OO) (UML)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .form文件_一篇文章学会文件上传