Python 数据处理库pandas教程(最后附上pandas_datareader使用实例)
0 简单介绍
pandas是一个Python语言的软件包,在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础编程库。本文是对它的一个入门教程。
pandas提供了快速,灵活和富有表现力的数据结构,目的是使“关系”或“标记”数据的工作既简单又直观。它旨在成为在Python中进行实际数据分析的高级构建块。
另外,pandas常常和NumPy一起使用,本文中的源码中也会用到NumPy(教程见Python 机器学习库 NumPy 教程)。
1 安装
pip install pandas
2 核心数据结构
pandas最核心的就是Series和DataFrame两个数据结构。
这两种类型的数据结构对比如下:
| 名称 | 维度 | 说明 |
|---|---|---|
| Series | 1维 | 带有标签的同构类型数组 |
| DataFrame | 2维 | 表格结构,带有标签,大小可变,且可以包含异构的数据列 |
DataFrame可以看做是Series的容器,即:一个DataFrame中可以包含若干个Series。
3 Index对象与数据访问
pandas的Index对象包含了描述轴的元数据信息。当创建Series或者DataFrame的时候,标签的数组或者序列会被转换成Index。
请注意:
- Index并非集合,因此其中可以包含重复的数据
- Index对象的值是不可以改变,因此可以通过它安全的访问数据
DataFrame提供了下面两个操作符来访问其中的数据:
loc:通过行和列的索引来访问数据iloc:通过行和列的下标来访问数据
3.1 基础方法:[]和.
series1 = pd.Series([1, 2, 3, 4, 5, 6, 7],
index=["C", "D", "E", "F", "G", "A", "B"]) print("series1['E'] = {} \n".format(series1['E']));
print("series1.E = {} \n".format(series1.E));
结果:

注1:对于类似属性的访问方式.来说,要求索引元素必须是有效的Python标识符的时候才可以,而对于series1.1这样的索引是不行的。
注2:[]和.提供了简单和快速访问pands数据结构的方法。这种方法非常的直观。然而,由于要访问的数据类型并不是事先知道的,因此使用这两种方法方式存在一些优化限制。因此对于产品级的代码来说,pandas官方建议使用pandas库中提供的数据访问方法。
3.2 loc与iloc
loc:通过行和列的索引来访问数据
iloc:通过行和列的下标来访问数据
通过这两个操作符我们还可以访问某个范围之内的数据。
3.3 at与iat
这两个操作符用来访问单个的元素值(Scalar Value)。类似的:
at:通过行和列的索引来访问数据iat:通过行和列的下标来访问数据
3.4 Index对象
Index提供了查找,数据对齐和重新索引所需的基础数据结构。
我们可以通过一个数组来创建Index对象。在创建的同时我们还可以通过name指定索引的名称:
index = pd.Index(['C','D','E','F','G','A','B'], name='note')
3.5 MultiIndex
MultiIndex,或者称之为Hierarchical Index是指数据的行或者列通过多层次的标签来进行索引。
4 Series数据对象
4.1 Series数据对象的生成
Series是一维结构的数据,Series的数据类型有list、ndarray、字典、常量;
以下结果中:
输出的最后一行是Series中数据的类型,这里的数据都是int64类型的。
数据在第二列输出,第一列是数据的索引,在pandas中称之为Index。
list
data=[-2,-1,0,1,2]
index=["a","b","c","d","e"]
s1=pd.Series(data,index=index)
print(s1)
结果:

ndarray
data=np.random.randn(5)
index=["a","b","c","d","e"]
s2=pd.Series(data,index=index)
print(s2)
结果:

字典
data={'a':0,'b':1,'c':2}
index=["a","b","c","d","e"]
s3=pd.Series(data,index=index)
print(s3)
结果:

常量
data=5
index=["a","b","c","d","e"]
s4=pd.Series(data,index=index)
print(s4)
结果:

如果不指定(像上面这样),索引是[a, ...,z]的形式。不过我们也可以在创建Series的时候指定索引。索引未必一定需要是整数,可以是任何类型的数据,例如字符串。
4.2 Series数据对象的访问
Series的访问方法:s.values、s.index、索引访问、切片访问
print(s3.values)
print(s3.index)
print(s3[['a','b']]) #print(s3['a'])
print(s3[:3])
结果:

5 DataFrame数据对象
5.1 DataFrame数据对象的生成
DataFrame的数据类型有列表组成的字典、嵌套列表、二维ndarray、Series组成的字典、字典的列表、字典组成的字典等;DataFrame默认的索引和列名都是[0, N-1]的形式。
列表组成的字典
data={'one':[1,2,3,4],'two':[5,6,7,8]}
df1=pd.DataFrame(data)
print(df1)
结果:

嵌套列表
data=[[1,2,3,4],[5,6,7,8]]
df2=pd.DataFrame(data,index=['a','b'],columns=['one','two','three','four'])
print(df2)
结果:

二维ndarray
data=np.zeros((2,),dtype=[('A','i4'),('B','f4'),('C','a10')])
print(data)
df3=pd.DataFrame(data)
print(df3)
结果:

Series组成的字典
DataFrame的不同列可以是不同的数据类型;如果以Series数组来创建DataFrame,每个Series将成为一行,而不是一列。
data={'one':pd.Series([1,2,3],index=['a','b','c']),
'two':pd.Series([4,5,6],index=['b','c','d'])}
df4=pd.DataFrame(data)
print(df4)
结果:

字典的列表
data=[{'a':1,'b':2},{'a':4,'b':4,'c':5}]
df5=pd.DataFrame(data)
print(df5)
结果:

字典组成的字典
data={('a','b'):{('A','B'):1,('A','C'):2},
('a','a'):{('A','C'):3,('A','B'):4},
('a','c'):{('A','B'):5,('A','B'):6},
('b','a'):{('A','C'):7,('A','B'):8},
('b','b'):{('A','D'):9,('A','B'):10}
}
df6=pd.DataFrame(data)
print(df6)
结果:

5.2 DataFrame数据对象的访问
print(df1)
print(df1.index)
print(df1.columns)
print()
print(df1.values)
print()
print(df1['one']) # print(df[['one']]) 此写法带列标
print()
print(df1[0:1]) print(df1.loc[:,['one','two']])
print()
print(df1.loc[[0],['one','two']])
print()
print(df1.iloc[0:2,0:1])
print()
print(df1.ix[0,['one','two']])
print()
print(df1.ix[[0,1],[0,1]])
结果:

6 数据整合
6.1 Concatenate:串联,连接,级连
6.2 Append:附加,增补
6.3 Merge:融合,归并,合并
6.4 Join:合并,接合,交接
7 文件操作
pandas库提供了一系列的read_函数来读取各种格式的文件,它们如下所示:
7.1 读取Excel文件
注:要读取Excel文件,还需要安装另外一个库:
xlrd
df1 = pd.read_excel("data/test.xlsx")
7.2 读取CSV文件
df2 = pd.read_csv("data/test1.csv")
8 处理无效值
8.1 忽略无效值
通过pandas.DataFrame.dropna函数抛弃无效值
8.2替换无效值
通过fillna函数将无效值替换成为有效值
9 实例:使用pandas_datareader获取股票数据并处理
# -*- coding: utf-8 -*-
"""
Created on Wed Jun 5 20:20:47 2019 @author: quanzhan
""" import numpy as np
import pandas as pd
import pandas_datareader.data as web
import datetime
#获取股票数据方法一:
#df_csvsave=web.DataReader('601233.SS','yahoo',datetime.datetime(2019,6,1),datetime.date.today())
#保存到csv
#df_csvsave.to_csv('D:\\AnacondaProjects\\learnnumpy\\exchange_06.csv',columns=df_csvsave.columns,index=True)
#获取股票数据方法二:
df_csvload=pd.read_csv("D:\\AnacondaProjects\\learnnumpy\\exchange_06.csv",parse_dates=True,index_col=0,encoding='gb2312')
print("***************************************************")
print(df_csvload)
print("***************************************************")
print(df_csvload.index)
print(df_csvload.columns) print("*****#股票内容查看: head()、tail()、shape、describe()、info()*********")
#股票内容查看: head()、tail()、shape、describe()、info()
print(df_csvload.head(3))
print(df_csvload.tail(3))
print(df_csvload.shape)
print(df_csvload.describe())
print(df_csvload.info())
print("*******# 缺失值处理:isnull()、notnull()、dropna()、fillna()**********")
# 数据规整化处理
# 缺失值处理:isnull()、notnull()、dropna()、fillna()
print(df_csvload.isnull())
# .T.any()非缺失值仍然显示
print(df_csvload.notnull().T.any())
# axis=0删除包含缺失值的行 axis=1 删除包含缺失值的列 how='all' 所有值均缺就删除 how='any'只要有一个缺失值就删除
print(df_csvload.dropna(axis=0,how='all'))
# method='ffill'行或列上的上一个值来填充缺失值 inplace=True 改变原来的dataFrame
print(df_csvload.fillna(method='ffill',axis=0,inplace=True))
print("***************# 精度转换 :(1) '%0.2f'%x******************")
# 特殊值处理
# 精度转换 :(1) '%0.2f'%x
df_csvload1=df_csvload.applymap(lambda x:'%0.3f'%x) df_csvload1.Volume=df_csvload.ix[:,['Volume']].apply(lambda x:'%0.0f'%x,axis=1)
print(df_csvload1)
print("******************# 精度转换 :(2)*********************************")
# 精度转换 :(2)
df_csvload2=df_csvload.round(1)
df_csvload2.Volume=df_csvload2.Volume.astype(int)
print(df_csvload2)
print("****************# 特定值查询后用此列的中位数填充*********************")
# 特定值查询后用此列的中位数填充
print(df_csvload)
print()
print(df_csvload[df_csvload.values==0])
df_csvload.loc[df_csvload.loc[:,'High']==0,'High']=df_csvload.High.median()
print()
print(df_csvload)
参考
Python 数据处理库pandas教程(最后附上pandas_datareader使用实例)的更多相关文章
- Python 数据处理库 pandas 入门教程
Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...
- 程序员用于机器学习编程的Python 数据处理库 pandas 进阶教程
数据访问 在入门教程中,我们已经使用过访问数据的方法.这里我们再集中看一下. 注:这里的数据访问方法既适用于Series,也适用于DataFrame. **基础方法:[]和. 这是两种最直观的方法,任 ...
- 程序员用于机器学习编程的Python 数据处理库 pandas 入门教程
入门介绍 pandas适合于许多不同类型的数据,包括: · 具有异构类型列的表格数据,例如SQL表格或Excel数据 · 有序和无序(不一定是固定频率)时间序列数据. · 具有行列标签的任意矩阵数据( ...
- Python 数据处理库 pandas
核心数据结构 pandas最核心的就是Series和DataFrame两个数据结构. 名称 维度 说明 Series 1维 带有标签的同构类型数组 DataFrame 2维 表格结构,带有标签,大小可 ...
- Python数据分析库pandas基本操作
Python数据分析库pandas基本操作2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多 个人分类: Pyt ...
- Python 机器学习库 NumPy 教程
0 Numpy简单介绍 Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy ...
- 教程 | 一文入门Python数据分析库Pandas
首先要给那些不熟悉 Pandas 的人简单介绍一下,Pandas 是 Python 生态系统中最流行的数据分析库.它能够完成许多任务,包括: 读/写不同格式的数据 选择数据的子集 跨行/列计算 寻找并 ...
- python 数据处理学习pandas之DataFrame
请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来 ...
- Python数据处理进阶——pandas
对于python进行数据处理来说,pandas式一个不得不用的包,它比numpy很为强大.通过对<利用python进行数据分析>这本书中介绍pandas包的学习,再加以自己的理解,写下这篇 ...
随机推荐
- SVN优于CVS之处
1.原子提交.一次提交不管是单个还是多个文件,都是作为一个整体提交的.在这当中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏. 2.重命名.复制.删除文件等动作都保存在版本历史记录当中. 3 ...
- Oraclecloud创建时没有上传公钥的解决办法
https://blogs.oracle.com/cloud-infrastructure/recovering-opc-user-ssh-key-on-oracle-cloud-infrastruc ...
- 数据结构Java版之广度优先图(十三)
广度优先,则是用的队列,将每一层的节点先存入队列中去,后依次取出队列中的节点,显示与当前节点存在边,但是未被访问过的节点,也就是下一层与之相联系的节点,再将这些节点存入队列.经过层层迭代,就可以完全遍 ...
- RabbitMQ入门学习系列(七) 远程调用RPC
快速阅读 生产者和消费者启动以后,都有一个接收事件,消费者是接收事件是处理调用方法以后等待生产者的返回,生产者的接收事件是处理接收生产者发送的消息,进行处理.消费者发送的时候要在回调队列中加入一个标识 ...
- 深度学习面试题24:在每个深度上分别卷积(depthwise卷积)
目录 举例 单个张量与多个卷积核在深度上分别卷积 参考资料 举例 如下张量x和卷积核K进行depthwise_conv2d卷积 结果为: depthwise_conv2d和conv2d的不同之处在于c ...
- python 与开源Gis 书本知识点测试
# -*- coding: utf-8 -*- print(u"python与开源QGis课题研究组")#print("汉字") #++++++++++++++ ...
- zookeeper/kafka的部署
Ubuntu中安装zookeeper及kafka并配置环境变量 首先安装zookeeper zookeeper需要jdk环境,请在jdk安装完成的情况下安装zookeeper1.从官网下载zook ...
- percona-mysql5.7.24使用xtrabackup工具配置主从同步
主从配置详细过程: 环境准备: 配置好服务器,主从服务器都安装并启动mysql数据库 # 添加读写账号和只读账号,应用配置中,写主库用读写账号,统计从库数据yoga只读账号 grant select, ...
- 导出swagger2生成的文档
百度了好多篇用法,没法用.特此记录一下 一.下载项目 下载https://github.com/Swagger2Markup/spring-swagger2markup-demo下的项目,保存,注意文 ...
- 果卿居士-《四种清净明诲》之不淫欲 -------------------------------------------------------------------------------- (转自学佛网:http://www.xuefo.net/nr/article19/186541.html)
“如不断淫”, “阿难,如不断淫,修禅定者,如蒸砂石.欲其成饭.经百千劫.只名热砂.何以故.此非饭本.砂石成故.” 阿难啊,如果这个修行的人,最后不能断除淫欲,包括夫妻之间的淫欲,如果你不能断除这个欲 ...