pandas简介

pandas是一个强大的Python数据分析的工具包。是基于Numpy来构件的。

pandas提供快速、灵活和富有表现力的数据结构。

主要功能:

  • 具备对其功能的数据结构DataFrame、Series

  • 集成时间序列功能

  • 提供丰富的数学运算和操作

  • 灵活处理缺失数据

安装

  1. pip install pandas

pandas数据结构-系列Series

Series是一种类似于一位数组的对象,由一组数据和一组与之相关的数据标签(索引)组成。

  • values:一组数据(ndarray类型)

  • index:相关的数据索引标签

pandas系列可以使用如下构造函数创建

  1. pandas.Series( data, index, dtype, copy)

参数如下

编号 参数 描述
1 data 数据采取各种形式,如:ndarraylistconstants
2 index 索引值必须是唯一的和散列的,与数据的长度相同。 默认np.arange(n)如果没有索引被传递。
3 dtype dtype用于数据类型。如果没有,将推断数据类型
4 copy 复制数据,默认为false

series创建

1.通过列表或numpy数组创建,默认索引为0到N-1的整数型索引(隐式索引)

  1. # 使用列表创建series
  2. Series(data=[1,2,3,4])

  3. # 通过设置index参数指定索引
  4. s = Series(data=[1,2,3,4],index=["a","b","c","d"])

  5. # 通过numpy创建
  6. Series(data=np.random.randint(0,100,size=(3,)))

2.通过字典创建

  1. # 通过字典创建series
  2. s = Series(data={'a':1, 'b':2})

3.从标量创建一个系列

  1. import pandas as pd
  2. import numpy as np
  3. s = pd.Series(5, index=[0, 1, 2, 3])

Series特性

Series支持数组的特性

  • 从ndarray创建Series:Series(arr)

  • 与标量运算:sr*2

  • 两个Series运算:sr1+sr2

  • 索引:sr[0], sr[[1,2,4]]

  • 切片:sr[0:2](切片依然是视图形式)

  • 通用函数:np.abs(sr)

  • 布尔值过滤:sr[sr>0]

  1. s1 = Series(data=[1,2,3,4],index=["a","b","c","d"])
  2. s2 = Series(data=[1,2,3,4],index=["a","b","e","d"])
  3. s3 = s1+s2

统计函数

  • mean():求平均数

  • sum():求和

  • cumsum():累加

  1. s = pd.Series({"a":1,"b":2,"c":3,"d":5,"e":7})
  2. s.cumsum()

Series支持字典的特性(标签)

  • 从字典创建Series:Series(dic),

  • in运算:’a’ in sr、for x in sr

  • 键索引:sr['a'], sr[['a', 'b', 'd']]

  • 键切片:sr['a':'c']

  • 其他函数:get('a', default=0)等

  1. # 点索引取值
  2. s = pd.Series(0,index=["a","b","c","d","e"])
  3. s.a
  4. #

  5. s1 = pd.Series({'a':1,'b':2})
  6. s1.a #
  7. s1[0] #

  8. s1*2
  9. a 2
  10. b 4

Series索引

1.具有位置的系列访问数据

系列中的数据可以使用类似于访问ndarray中的数据来访问

  1. s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
  2. # 检索第一个元素
  3. print s[0]
  4. # 检索系列中的前三个元素
  5. print s[:3]
  6. # 检索最后三个元素
  7. print s[-3:]

2.使用标签检索数据(索引)

一个系列就像一个固定大小的字典,可以通过索引标签获取和设置值。

  1. import pandas as pd
  2. s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

  3. # 使用索引标签值检索单个元素
  4. print(s["a"])

  5. # 使用索引标签值列表检索多个元素
  6. print(s[['a','c','d']])

  7. # 如果不包含标签,则会出现异常
  8. print s['f']
  9. # keyError:"f"

Series数据对齐

pandas在运算时,会按索引进行对齐然后计算。如果存在不同的索引,则结果的索引是两个操作数索引的并集。

  • 在运算中自动对齐不同索引的数据

  • 如果索引不对应,则补NaN

  1. s1 = Series(data=[1,2,3,4],index=["a","b","c","d"])
  2. s2 = Series(data=[1,2,3,4],index=["a","b","e","d"])
  3. s3 = s1+s2
  4. # 输出
  5. a 2.0
  6. b 4.0
  7. c NaN
  8. d 8.0
  9. e NaN
  10. dtype: float64

当索引没有对应的值,可能会出现缺失数据显示NaN(not a number)的情况。

  1. s3.isnull() # 为空检测
  2. s3.notnull() # 非空检测
  3. s3[[True,True,False,True,False]] # 如果将布尔值作为Series的索引,则只会保留True对应的元素的值
  4. s3[s3.notnull()] # 直接可以返回没有缺失的数据

  5. # 输出:
  6. a 2.0
  7. b 4.0
  8. d 8.0
  9. dtype: float64

pandas数据结构-数据帧DataFrame

数据帧(DataFrame)是二维数据结构,即数据以行和列的表格方式排列。

数据帧(DataFrame)的功能特点:

  • 潜在的列是不同的类型

  • 大小可变

  • 标记轴(行和列)

  • 可以对行和列执行算术运算

pandas中的DataFrame可以使用以下构造函数创建

  1. pandas.DataFrame( data, index, columns, dtype, copy)

参数如下:

编号 参数 描述
1 data 数据采取各种形式,如:ndarrayseriesmaplistsdictconstant和另一个DataFrame
2 index 对于行标签,要用于结果帧的索引是可选缺省值np.arrange(n),如果没有传递索引值。
3 columns 对于列标签,可选的默认语法是 - np.arange(n)。 这只有在没有索引传递的情况下才是这样。
4 dtype 每列的数据类型。
5 copy 如果默认值为False,则此命令(或任何它)用于复制数据。

创建DataFrame

Pandas数据帧(DataFrame)可以使用各种输入创建,如 -

  • 列表

  • 字典

  • 系列

  • Numpy ndarrays

  • 另一个数据帧(DataFrame)

  1. # 创建一个空数据帧
  2. import pandas as pd
  3. df = pd.DataFrame()

  4. # 从列表创建DataFrame
  5. data = [1,2,3,4,5]
  6. df = pd.DataFrame(data)

从ndarrays/Lists的字典来创建DataFrame

所有的ndarrays必须具有相同的长度。如果传递了索引(index),则索引的长度应等于数组的长度。

如果没有传递索引,则默认情况下,索引将为range(n),其中n为数组长度。

  1. import pandas as pd
  2. data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
  3. df = pd.DataFrame(data)

  4. # 使用数组创建一个索引的数据帧
  5. data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
  6. df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])

从系列的字典来创建DataFrame

字典的系列可以传递以形成一个DataFrame。 所得到的索引是通过的所有系列索引的并集。

  1. import pandas as pd

  2. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  3. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

  4. df = pd.DataFrame(d)
  5. print(df)

DataFrame数据查询

列的相关操作

列选择

从数据帧(DataFrame)中选择一列

  1. import pandas as pd

  2. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  3. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

  4. df = pd.DataFrame(d)
  5. df["one"]

  6. 输出
  7. a 1.0
  8. b 2.0
  9. c 3.0
  10. d NaN
  11. Name: one, dtype: float64

列添加

通过向现有数据框添加一个新列

  1. print ("Adding a new column by passing as Series:")
  2. df['three']=pd.Series([10,20,30],index=['a','b','c'])
  3. print(df)

  4. 输出
  5. Adding a new column by passing as Series:
  6. one two three
  7. a 1.0 1 10.0
  8. b 2.0 2 20.0
  9. c 3.0 3 30.0
  10. d NaN 4 NaN

列删除

列可以删除或弹出

  1. import pandas as pd

  2. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  3. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']),
  4. 'three' : pd.Series([10,20,30], index=['a','b','c'])}

  5. df = pd.DataFrame(d)
  6. print ("Deleting the first column using DEL function:")
  7. del df['one']

行的相关操作

行的标签选择

通过将行标签传递给loc()函数来选择行

  1. import pandas as pd

  2. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  3. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

  4. df = pd.DataFrame(d)
  5. print(df.loc['b'])

  6. 输出
  7. one 2.0
  8. two 2.0
  9. Name: b, dtype: float64

行的整数位置选择

可以通过将整数位置传递给iloc()函数来选择行

  1. import pandas as pd

  2. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  3. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

  4. df = pd.DataFrame(d)
  5. print(df.iloc[2])

  6. 输出
  7. one 3.0
  8. two 3.0
  9. Name: c, dtype: float64

行切片

可以使用:运算符选择多行

  1. import pandas as pd

  2. d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  3. 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

  4. df = pd.DataFrame(d)
  5. print(df[2:4])

  6. 输出
  7. one two
  8. c 3.0 3
  9. d NaN 4

添加行

使用append()函数将新行添加到DataFrame, 此功能将附加行结束

  1. import pandas as pd

  2. df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
  3. df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])

  4. df = df.append(df2)
  5. print(df)
  6. 执行上面示例代码,得到以下结果 -
  7.  
  8. a b
  9. 0 1 2
  10. 1 3 4
  11. 0 5 6
  12. 1 7 8

删除行

使用索引标签从DataFrame中删除或删除行。

  1. import pandas as pd

  2. df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
  3. df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])

  4. df = df.append(df2)

  5. # Drop rows with label 0
  6. df = df.drop(0)

  7. print(df)

执行上面示例代码,得到以下结果 -

  1. a b
  2. 1 3 4
  3. 1 7 8

pandas库简介和数据结构的更多相关文章

  1. Pandas库中的DataFrame

    1 简介 DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matla ...

  2. 【Python学习笔记】Pandas库之DataFrame

    1 简介 DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matla ...

  3. Python3.x:第三方库简介

    Python3.x:第三方库简介 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex ...

  4. Pandas 库之 DataFrame

    How to use DataFrame ? 简介 创建 DataFrame 查看与筛选数据:行列选取 DataFrame 数据操作:增删改 一.About DataFrame DataFrame 是 ...

  5. Pandas库之DataFrame

    Pandas库之DataFrame 1 简介 DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 或许说它可能有点像matlab的矩阵,但是matlab ...

  6. BerkeleyDB库简介

    BerkeleyDB库简介 BerkeleyDB(简称为BDB)是一种以key-value为结构的嵌入式数据库引擎: 嵌入式:bdb提供了一系列应用程序接口(API),调用这些接口很简单,应用程序和b ...

  7. LevelDB库简介

    LevelDB库简介 一.LevelDB入门 LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询 ...

  8. pandas库学习笔记(二)DataFrame入门学习

    Pandas基本介绍——DataFrame入门学习 前篇文章中,小生初步介绍pandas库中的Series结构的创建与运算,今天小生继续“死磕自己”为大家介绍pandas库的另一种最为常见的数据结构D ...

  9. 数据分析与展示---Pandas库入门

    简介 一:Pandas库的介绍 二:Pandas库的Series类型 (一)索引 (1)自动索引 (2)自定义索引 (二)Series类型创建 (1)列表创建 (2)标量值创建 (3)字典类型创建(将 ...

随机推荐

  1. Delphi 算术运算符与算术表达式

  2. 搭建docker+k8s踩过的坑

    问题一: # yum install -y etcd kubernetes Error: docker-ce-cli conflicts with :docker--.gitb2f74b2.el7.c ...

  3. apache 部署

    <VirtualHost *:80> ServerAdmin webmaster@dummy-host.localhost DocumentRoot "D:/EmpireServ ...

  4. AUC计算方法

    本质是ROC曲线下的面积,ROC曲线x轴是误判率/误报率(false positive rate),y轴是准确率/命中率(true positive rate). AUC是ROC曲线与横轴所围的面积. ...

  5. QByteArray引发的bug

    QByteArray引发的bug 在接收UDP数据的函数里,有如下代码片段 if(0x10 == data.size() && 0xCA == (unsigned char)data. ...

  6. java作业利用递归解决问题

    第一题 利用递归求组合数 设计思想 (1)首先根据公式求,利用递归完成阶乘函数的初始化,并且通过调用阶乘,实现公式计算 (2)递推方法,根据杨辉三角的特点,设置二维数组,从上到下依次保存杨辉三角所得数 ...

  7. N皇后问题的递归与非递归解法

    都在注释里了: public class NQueen { public static void main(String[] args) { Scanner sc = new Scanner(Syst ...

  8. pyqt5--动画

    动画类别继承结构图 天子骄龙

  9. jQuery、JS读取xml文件里的内容(JS先通过document.implementation.createDocument方法将xml转换成document对象,jQuery将读取到的xml转成table)

    xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...

  10. 解决postgresql在docker中无法保存状态的问题

    PS:最佳解决方式是将目录挂载到宿主机,容器出问题了,数据还在,以下方式容器出问题会丢失数据,以下思想只供参考!!! 用过docker的人都知道,docker是不适合来放数据库的,这也不是绝对的.如果 ...