Python学习笔记(十七)——Pandas库

这篇具有很好参考价值的文章主要介绍了Python学习笔记(十七)——Pandas库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数组只能存储一种类型的数据, 同时, 数组提供了许多方便统计计算的功能 (如平均值 mean 、标准差 std 等)

pandas与numpy的区别

pandas 是基于 numpy 数组构的, 但 二者最大的不同是 pandas 是专门为处 理表格和混杂数据设计的,比较契合统 计分析中的表结构,而 numpy 更适合处 理统一的数值数组数据。
举个例子进行对比
chengji=[['', '期末', '期末'], ['张三',50, 80], ['李四', 60, 90], ['王老五', 70, 89]]
np.array(chengji)

#array([['', '期末', '期末'],
#['张三', '50', '80'],
#['李四', '60', '90'],
#['王老五', '70', '89']], dtype='<U3')

上图是使用numpy得出的结果

dic={ ' 期 中 ':[50,60,70], ' 期 末':[80,90,89]}
pd.DataFrame(dic,index=['张三','李四','王老五'])

Python学习笔记(十七)——Pandas库

上图是使用pandas得出的结果

Pandas库简介

Python学习笔记(十七)——Pandas库

pandas官网

 pandas扩展包的安装

  1. win+R打开命令行
  2. 输入pip install pandas

pandas扩展包的调用

import pandas as pd

pandas数据结构

Python学习笔记(十七)——Pandas库

 pandas库的理解

Numpy Pandas
基础数据类型
扩展数据类型
关注数据的结构表达
关注数据的应用表达
维度:数据间的关系
数据与索引间的关系

相同操作,输出形式对比:

np.arange(4)

#array([0,1,2,3])

pd.Series(np.arange(4))
#0 0
#1 1
#2 2
#3 3
#dtype: int32

可以看出使用pandas库可视化程度更高,能以比较清晰直观的形式展现处理后的数据

series对象类型

Series 是一种类似于一维数组的对象,它由一组数据以及一组与之相关的索引组成,仅由一组数据即可产生最简单的Series
Python学习笔记(十七)——Pandas库Python学习笔记(十七)——Pandas库Python学习笔记(十七)——Pandas库

 series对象的创建

 dp.Serise(obj=None, index=None, dtype=None)

对象的类型
标量或 Python 列表
Python 字典
Ndarray
其他函数
index
自动生成
人为指定
并存,但不能混用

Python学习笔记(十七)——Pandas库

 创建时注意事项

标量值, index 表达 Series 类型的尺寸
Python 列表, index 与列表元素个数一致
Python 字典,键值对中的“键”是索引, index 从字典中进行选择操作
ndarray ,索引和数据都可以通过 ndarray 类型创建
其他函数, range() 函数等

Python学习笔记(十七)——Pandas库

b=pd.Series([9,8,7],['a','b','c'])
#b
#a 9
#b 8
#c 7
#dtype: int64
>>> b.values
array([9, 8, 7], dtype=int64)
>>>b.index #索引
Index(['a', 'b', 'c'], dtype='object’)
>>> b.index.name='索引' #定义索引的名字
>>> b.name='Series对象' #对象名
>>> b
索引
a 9
b 8
c 7
Name: Series对象, dtype: int64
Series 类型的索引操作类似 ndarray 类型:
索引方法相同,采用 []
NumPy 中运算和操作可用于 Series 类型
可以通过自定义索引的列表进行切片
可通过自动索引进行切片,如果存在自定义索引,则一同被切片

Python学习笔记(十七)——Pandas库

>>> b=pd.Series([9,8,7],['a','b','c'])
>>> b
a 9
b 8
c 7
dtype: int64

>>> b[b>=b.median()]
a 9
b 8
dtype: int64

>>> np.exp(b)
a 8103.083928
b 2980.957987
c 1096.633158
d 403.428793
dtype: float64
Series 类型的操作类似 Python 字典类型:
通过自定义索引访问
保留字 in 操作:判定给定的索引值是否在索引序列中
使用 .get() 方法:类似于字典中的 get 方法
>>> b=pd.Series([9,8,7],['a','b','c'])
>>> b
a 9
b 8
c 7
dtype: int64

>>> b['a']
9
>>> 'c' in b
True

>>> b.get('a')
9

series常用函数 

Python学习笔记(十七)——Pandas库

DataFrame对象类型

  1. DataFrame类型由共用相同索引的一组列组成。
  2. DataFrame是一个表格型的数据类型,每列值类型可以不同
  3. DataFrame既有行索引(index)、也有列索引(columns)
  4. DataFrame常用于表达二维数据,但可以表达多维数据。

Python学习笔记(十七)——Pandas库Python学习笔记(十七)——Pandas库

 DataFrame创建

pd.DataFrame(data=None, index=None, columns=None, dtype=None)
主要待创建 obj 类型:
二维 ndarray 对象
由一维 ndarray 、列表、字典、元组或 Series 构成的字典
Series 类型
其他的 DataFrame 类型
columnsindex 分别为指定行和列的索引值,列表类型。

Python学习笔记(十七)——Pandas库

df=pd.DataFrame(np.random.randint(60,100,size=(2,3)),index=['期中','期末'],columns=['张三','李四','王老五'])

>>> df.values
array([[70, 92, 72],
[60, 60, 88]])
>>> df.shape
(2,3)

>>> df.index
Index(['期中', '期末'], dtype='object')
>>> df.columns
Index(['张三', '李四', '王老五'], dtype='object')

>>> df.describe()
张三 李四 王老五
count 2.000000 2.000000 2.000000
mean 65.000000 76.000000 80.000000
std 7.071068 22.627417 11.313708
min 60.000000 60.000000 72.000000
25% 62.500000 68.000000 76.000000
50% 65.000000 76.000000 80.000000
75% 67.500000 84.000000 84.000000
max 70.000000 92.000000 88.000000

Python学习笔记(十七)——Pandas库

 根据行列参数索引。

>>> df.['x']
a 0
b 3
c 6
Name: x, dtype: int32

根据整数位置参数索引

>>> df.iloc[1,:]
x 3
y 4
z 5
Name:b, dtype: int32

某个轴上拥有多个索引级别

>>> df.['x','z']
a 0 2
b 3 5
c 6 8

列索引

通过类似字典的方式:
某一列 : obj[ 列索引值 ]
>>> df['qizhong']
张三 50
李四 60
王老五 70
Name: qizhong, dtype: int64
多列 : obj[ 列索引值列表 ]
>>> df[['qizhong', 'qimo']]
qizhong qimo
张三 50 80
李四 60 90
王老五 70 89

行索引

使用 .loc[] index 来进行行索引
某一行 : obj.loc[ 行索引值 ]
>>> df.loc['张三']
qizhong 50
qimo 80
Name: 张三, dtype: int64
多行 : obj[ 行索引值列表 ]
>>> df.loc[['李四', '张三']]
qizhong qimo
李四 60 90
张三 50 80

效果图

Python学习笔记(十七)——Pandas库

位置索引

iloc 函数索引的数据是 int 整型, Python 默认的前闭后开。索引方式与数组类似

 Python学习笔记(十七)——Pandas库

Python学习笔记(十七)——Pandas库
连续索引与不连续索引
df=pd.DataFrame(np.arange(16).reshape((4,4)),index=["a","b","c","d"],columns=["w","x","y","z"])
连续索引:索引值为切片
>>> df.loc['a':'c']
>>> df.iloc[:3, :]
w x y z
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
不连续索引:索引值为列表
>>> df[['w', 'y']]
>>> df.iloc[:, [0,2]]
w y
a 0 2
b 4 6
c 8 10
d 12 14

重新索引

.reindex() 能够改变或重排 Series DataFrame 索引
Python学习笔记(十七)——Pandas库
实例
Python学习笔记(十七)——Pandas库

删除指定索引

.drop() 能够删除 Series DataFrame 指定行或列索引
pd.drop(labels, axis=0)
>>> d
城市 环比 同比 定基
0 北京 101.5 120.7 121.4
1 上海 101.2 127.3 127.8
2 广州 101.3 119.4 120.0
3 深圳 102.0 145.5 125.3
4 沈阳 101.1 101.4 101.6
>>> d.drop(3)
城市 环比 同比 定基
0 北京 101.5 120.7 121.4
1 上海 101.2 127.3 127.8
2 广州 101.3 119.4 120.0
4 沈阳 101.1 101.4 101.6
>>> d.drop('同比', axis =1)
城市 环比 定基
0 北京 101.5 121.4
1 上海 101.2 127.8
2 广州 101.3 120.0
4 沈阳 101.1 101.6

Pandas库常用操作

算数运算法则
算术运算根据行列索引,补齐后运算,运算默认产生浮点数;
补齐时缺项填充 NaN ( 空值 )
采用 + * / 符号进行的二元运算产生新的对象;
二维和一维、一维和零维间为广播运算;

实例

a=pd.DataFrame(np.arange(12).reshape((3,4))) 
b=pd.DataFrame(np.arange(20).reshape((4,5)))
运算结果为浮点型;
hape大小不一致,缺失部分元素以NaN补全
>>> a
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11

>>> b
0 1 2 3 4
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
3 15 16 17 18 19

Python学习笔记(十七)——Pandas库Python学习笔记(十七)——Pandas库

 方法形式的运算

Python学习笔记(十七)——Pandas库

 实例

>>> a
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11

>>> b
0 1 2 3 4
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
3 15 16 17 18 19

#加法
>>> b.add(a, fill_value=100)
0 1 2 3 4
0 0.0 2.0 4.0 6.0 104.0
1 9.0 11.0 13.0 15.0 109.0
2 18.0 20.0 22.0 24.0 114.0
3 115.0 116.0 117.0 118.0 119.0

#乘法
>>> b.mul(b, fill_value=0)
0 1 2 3 4
0 0.0 1.0 4.0 9.0 0.0
1 20.0 30.0 42.0 56.0 0.0
2 80.0 99.0 120.0 143.0 0.0
3 0.0 0.0 0.0 0.0 0.0

Series与Dataframe之间的计算

使用 Python 操作符:
以行为单位操作(参数必须是行),对所有行都有效。(类似于 numpy 中二维 数组与一维数
组的运算,但可能出现 NaN
使用 pandas 操作函数:
axis=0 :以列为单位操作(参数必须是列),对所有列都有效。
axis=1 :以行为单位操作(参数必须是行),对所有行都有效。

传播运算(标量运算)

不同维度数据类型之间的运算。
标量与 Seriers DataFrame 之间的运算(各元素均与标量运算)
>>> c=pd.Series(np.arange(3))
0 0
1 1
2 2
dtype: int32
>>> c+1
0 1
1 2
2 3
dtype: int32

>>> a=pd.DataFrame(np.arange(12).reshape((3,4)))
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
>>> a+1
0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
使用 Python 操作符:
以行为单位操作(参数必须是行),对所有行都有效。(类似于 numpy 中二维数组与一维数
组的运算,但可能出现 NaN
使用 pandas 操作函数:
axis=0 :以列为单位操作(参数必须是列),对所有列都有效。
axis=1 :以行为单位操作(参数必须是行),对所有行都有效。
传播运算(标量运算)
不同维度数据类型之间的运算。
标量与 Seriers DataFrame 之间的运算(各元素均与标量运算)
>>> c=pd.Series(np.arange(3))
0 0
1 1
2 2
dtype: int32
>>> c+1
0 1
1 2
2 3
dtype: int32

>>> a=pd.DataFrame(np.arange(12).reshape((3,4)))
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
>>> a+1
0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12

算数运算(传播机制)

默认 Seriers 参与 DataFrame 的行运算
Series 的索引匹配到 DataFrame的行,然后行一直向下传播。缺失元素 Nan 补全。
>>> c=pd.Series(np.arange(4))
>>> a=pd.DataFrame(np.arange(12).reshape((3,4)))

Python学习笔记(十七)——Pandas库

Python学习笔记(十七)——Pandas库

比较运算规则

二维和一维、一维和零维间为广播运算
采用 > < >= <= == != 等符号进行的二元运算产生布尔对象
不同维度,广播运算,默认在 1 ( )
>>> c=pd.Series(np.arange(4))
>>> a=pd.DataFrame(np.arange(12).reshape((3,4)))

 Python学习笔记(十七)——Pandas库

 Python学习笔记(十七)——Pandas库

 索引的排序

.sort_index() 方法在指定轴上根据索引进行排序,默认在 0 轴升序。

 .sort_index(axis=0, ascending=True)

>>> b
0 1 2 3 4
c 0 1 2 3 4
a 5 6 7 8 9
d 10 11 12 13 14
b 15 16 17 18 19

>>> c=b.sort_index()
0 1 2 3 4
a 5 6 7 8 9
b 15 16 17 18 19
c 0 1 2 3 4
d 10 11 12 13 14

>>> c.sort_index(axis=1,ascending=False)
4 3 2 1 0
a 9 8 7 6 5
b 19 18 17 16 15
c 4 3 2 1 0
d 14 13 12 11 10
.sort_values() 方法在指定轴上根据数值进行排序,默认升序

DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False) 

 Python学习笔记(十七)——Pandas库

a = [[9,3,1],[1,2,8],[1,0,5]]
data = pd.DataFrame(a, index=["0", "2", "1"], columns=["c", "a", "b"])

Python学习笔记(十七)——Pandas库

idx = pd.MultiIndex.from_tuples([('a', 1), ('a', 2), ('a', 2), ('b', 2), ('b', 1), ('b', 1)]) 
idx.names = ['first', 'second']
df_multi = pd.DataFrame({'A': np.arange(6, 0, -1)}, index=idx)

 Python学习笔记(十七)——Pandas库

 汇总和计算描述统计

Python学习笔记(十七)——Pandas库

Python学习笔记(十七)——Pandas库

Python学习笔记(十七)——Pandas库

 汇总和计算描述统计:累计统计分析函数

适用于 Series DataFrame 类型,滚动计算(窗口计算)

Python学习笔记(十七)——Pandas库

obj = pd.Series(['c','a','d','a','a','b','b','c','c'])

 serieris.unique():是以数组形式返回列的所有唯一值(特征的所有唯一值)

>>> uniques = obj.unique()
array(['c', 'a', 'd', 'b'], dtype=object)
Series.nunique(): 返回的是唯一值的个数
>>> uniques = obj.nunique()
4
serieris.value_counts() :按 value 的出现次数多少
降序排序
>>> obj.value_counts()
a 3
c 3
b 2
d 1
dtype: int64
pd.isin(values) :来查看参数 values 是否在 Series/Data Frame 内,有返回按 DataFrame 分布布尔值 True ,否则 False
values iterable, Series, DataFrame or dictt
Python学习笔记(十七)——Pandas库

函数映射

map 函数
作用在 Series 的每个元素
applymap 函数
作用 DataFrame 所有元素
apply 函数
作用在 DataFrame 行或列
df['col2'] = df['col1'].map(lambda x: x**2)
对行列用函数处理
apply 函数是 pandas 里面所有函数中自由度最高的函数
DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds
func : 函数,应用于每个列或行的函数;
axis =0 1 将函数应用于每一列或行;
raw :默认将每个行或列作为系列传递给函数 , 否则传递的函数将改为接收 ndarray 对象;
result_type {‘expand’ ,‘ reduce’ ,‘ broadcast’ None} ,默认为 None 。仅在
axis=1 情况下起作用,‘ expand’ :类似列表的结果将变成列, 'reduce' :如果可 能,
返回一个 Series ' broadcast ' :结果将广播到 DataFrame 的原始形状
>>> name=["张三","李四 ","王五"]
>>> idx=["指标1","指标2","指标3","指标4"]
>>>df=pd.DataFrame(np.random.randint(67,80,12).reshape((3,4)),index=name,colum
ns=idx)
>>> df.apply(lambda x:((x-min(x))/(max(x)-min(x)),axis=1)
指标1 指标2 指标3 指标4
张三 70 70 72 77
李四 79 67 73 74
王五 67 74 69 724

    |
    V
指标1 指标2 指标3 指标4
张三 0.0 0.0 0.285714 1.000000
李四 1.0 0.0 0.500000 0.583333
王五 0.0 1.0 0.285714 0.714286

apply函数(对行列用函数处理)

Python学习笔记(十七)——Pandas库

 传送门:Python全套学习笔记文章来源地址https://www.toymoban.com/news/detail-442869.html

到了这里,关于Python学习笔记(十七)——Pandas库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java SE 学习笔记(十七)—— 单元测试、反射

    开发好的系统中存在很多方法,如何对这些方法进行测试? 以前我们都是将代码全部写完再进行测试。其实这样并不是很好。在以后工作的时候,都是写完一部分代码,就测试一部分。这样,代码中的问题可以得到及时修复。也避免了由于代码过多,从而无法准确定位到错误

    2024年02月06日
    浏览(54)
  • Matpoltlib && Pandas 学习笔记

    目录 Matplotlib matplotlib常用方法 散点图 饼图 直方图 Pandas pandas.Series(*args)参数说明 DataFrame 数据结构 CSV file 数据清洗 Matplotlib 定义: Matplotlib 是python的绘图库 Pyplot 是其子库,通用绘制2D图表, matplotlib常用方法 散点图 饼图 直方图 Pandas 全称: \\\'panel data\\\' and \\\'python data analysis\\\'

    2024年01月24日
    浏览(36)
  • Pandas 2.2 中文官方教程和指南(十七)

    原文: pandas.pydata.org/docs/ 原文: pandas.pydata.org/docs/user_guide/duplicates.html Index 对象不需要是唯一的;你可以有重复的行或列标签。这一点可能一开始会有点困惑。如果你熟悉 SQL,你会知道行标签类似于表上的主键,你绝不希望在 SQL 表中有重复项。但 pandas 的一个作用是在数据

    2024年04月25日
    浏览(226)
  • pandas(十七)批量拆分与合并Excel文件

    一、Pandas 进行索引和切片的iloc、loc方法 iloc是基于整数位置进行索引和切片的方法 它允许您使用整数来访问 DataFrame 或 Series 中的特定行和列 loc是基于标签进行索引和切片的方法。 它允许您使用标签来访问 DataFrame 或 Series 中特定的行和列 二、Pandas批量拆分与合并Excel文件

    2024年02月12日
    浏览(41)
  • 【python】numpy的array数组与pandas的DataFrame表格互相转换(图文代码超详细)

    目录 0.环境 1.array数组和DataFrame表格的简单介绍 2.转换方式详解(代码) 0)前提:【需注意】 1)array转化为DataFrame 2)DataFrame转化为array  3)完整代码 windows + jupyter notebook测试代码 + python语言 首先我们要知道, array 类型的数组是来自于 numpy 库, 而 DataFrame 类型的表格是来自

    2024年02月11日
    浏览(36)
  • PyTorch学习笔记(十七)——完整的模型验证(测试,demo)套路

    完整代码:  采用GPU训练的模型,两种方法 (1)在CPU上加载,要从GPU映射到CPU,即把model = torch.load(\\\"mynn_9.pth\\\")改为: (2)将image转到GPU中,即把output = model(image)改为:    预测错误的原因可能是训练次数不够多  改成:        

    2024年02月11日
    浏览(41)
  • 【Python】数据科学工具(Numpy Pandas np.array() 创建访问数组 向量与矩阵 Series DataFrame)

    1.Numpy numpy是Python中一个非常重要的科学计算库,其最基础的功能就是N维数组对象——ndarray。 1.1 数组的创建 1)np.array() 用 np.array() 函数可以将Python的序列对象(如列表、元组)转换为ndarray数组。 2)arange、linspace、logspace np.arange(start, stop, step) :创建一个一维数组,其中的值

    2024年02月10日
    浏览(48)
  • JUC并发编程学习笔记(十七)彻底玩转单例模式

    单例中最重要的思想-------构造器私有! 恶汉式、懒汉式(DCL懒汉式!) 恶汉式 懒汉式 DCL懒汉式 完整的双重检测锁模式的单例、懒汉式、DCL懒汉式 但是有反射!只要有反射,任何的代码都不安全,任何的私有都是摆设 正常的单例模式: 反射破坏单例: 怎么去解决这

    2024年02月05日
    浏览(46)
  • 【Python数据处理】-Pandas笔记

    Pandas是一个强大的Python数据处理库,它提供了高效的数据结构和数据分析工具,使数据处理变得简单而快速。本篇笔记将介绍Pandas中最常用的数据结构——Series和DataFrame,以及数据处理的各种操作和技巧。 (一)创建Series Series是Pandas中的一维数组,类似于带有标签的NumPy数组

    2024年02月12日
    浏览(45)
  • 密码学学习笔记(十七 ):Edwards曲线数字签名算法 - edDSA

    Edwards曲线数字签名算法(Edwards-curve Digital Signature Alogorithm, edDSA)由Daniel J. Bernstein等人在2011年提出,它是一种使用基于扭曲爱德华兹曲线的Schnorr签名变体的数字签名方案。 EdDSA的一个特殊之处在于,该方案不要求每次签名都是用全新的随机数,而且该算法是确定性的。 EdDSA不直

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包