第5章 pandas入门

本文介绍了pandas的数据结构Series和DataFrame,强调了它们与NumPy的区别,并详细讲解了数据操作,包括重新索引、丢弃项、索引选取、算术运算、函数应用和排序。此外,还涵盖了汇总统计和描述性统计计算,如相关系数和唯一值计数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整述:
pandas是有使数据清洗和分析工作变得更快更简单的数据结构和操作工具。pandas经常和其它工具⼀同使用,如数值计算工具NumPy和SciPy,分析库statsmodels和scikit-learn,和数据可视化库matplotlib。pandas是基于NumPy数组构建的,特别是基于数组的函数和不使用for循环的数据处理。
pandas和NumPy区别:pandas是专门为处理表格和混杂数据设计的。NumPy更适合处理统⼀的数值数组数据。

5.1 pandas的数据结构介绍

两个主要数据结构:Series和DataFrame。
Series
Series是⼀种类似于⼀维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series:

import pandas as pd
obj=pd.Series([4,7,-5,3])
obj
#输出
0    4
1    7
2   -5
3    3
dtype: int64

可以通过Series 的values和index属性获取其数组表示形式和索引对象。
一般,我们希望所创建的Series带有⼀个可以对各个数据点进行标记的索引:

obj=pd.Series([4,7,-5,3],index=['b','v','w','q'])

对于许多应用而言,Series最重要的⼀个功能是,它会根据运算的索引标签自动对齐数据:

Series对象本身及其索引都有⼀个name属性,该属性跟pandas其他的关键功能关系非常密切

DataFrame
DataFrame是一个表格型的数据结构,它含有⼀组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同⼀个索引)。DataFrame中的数据是以⼀个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。
建DataFrame的办法有很多,最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典,类如excel 的表格:

import pandas as pd
data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],
'year':[2000,2001,2002,2001,2002,2003],
'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
frame=pd.DataFrame(data)
frame
#输出     自动加上行索引
	state	year	pop
0	Ohio	2000	1.5
1	Ohio	2001	1.7
2	Ohio	2002	3.6
3	Nevada	2001	2.4
4	Nevada	2002	2.9
5	Nevada	2003	3.2

通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为⼀个Series:Series其实就是个DataFrame的一列,Series的Name属性就是DataFrame的列索引。

import pandas as pd
data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],
'year':[2000,2001,2002,2001,2002,2003],
'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
frame=pd.DataFrame(data)
frame['state']
# 输出
0      Ohio
1      Ohio
2      Ohio
3    Nevada
4    Nevada
5    Nevada
Name: state, dtype: object

嵌套字典传给DataFrame,pandas就会被解释为:外层字典的键作为列,内层键则作为行索引。
下表列出了DataFrame构造函数所能接受的各种数据
列出了DataFrame构造函数所能接受的各种数据
索引对象
Index对象是不可变的,因此用户不能对其进行修改。
每个索引都有⼀些方法和属性,它们可⽤于设置逻辑并回答有关该索引所包含的数据的常见问题。下表列出了这些函数。
在这里插入图片描述

5.2 基本功能

重新索引
pandas对象的⼀个重要方法是reindex,其作用是创建⼀个新对象,它的数据符合新的索引。
在这里插入图片描述
丢弃指定轴上的项 使用drop方法。
索引、选取和过滤
Series索引(obj[…])的工作方式类似于NumPy数组的索引,只不过Series索引不只是整数
利用标签的切片运算与普通的Python切片运算不同,其末端是包含的:

import pandas as pd
obj=pd.Series((0,1,2,3,4),index=['a','b','c','d','e'])
obj['b':'c']
#输出
b    1
c    2
dtype: int64

用一个值或序列对DataFrame进行索引其实就是获取⼀个或多个列:

import pandas as pd
obj=pd.DataFrame((0,1,2),index=['a','b','c'],columns=['one'])
obj['one']
#输出
a    0
b    1
c    2
Name: one, dtype: int64

用loc和iloc进行选取
对于DataFrame的行的标签索引,标签运算符loc和iloc可以用类似NumPy的标记,使用轴标签(loc)或整数索引(iloc),从DataFrame选择行和列的子集。
frame.loc[val1,val2],val1是行,val2是列,先行后列

#作用于行标签
import pandas as pd
data={'state':['Ohio','Ohio','Ohio','Nevada','Nev','Ne'],
'year':[2000,2001,2002,2001,2002,2003],
'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
frame=pd.DataFrame(data,index=[1,2,3,4,5,6])
frame.loc[1,['state','pop']]   #输出怎么转置了?
#输出  
state    Ohio
pop       1.5
Name: 1, dtype: object

在pandas中,有多个方法可以选取和重新组合数据。对于DataFrame,下表做了总结。
在这里插入图片描述
整数索引
算术运算和数据对齐
pandas最重要的⼀个功能是,它可以对不同索引的对象进行算
术运算。在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集。对于DataFrame,对齐操作会同时发生在行和列上,不在对象中的结果中以缺省值呈现。
在算术方法中填充值当⼀个对象中某个轴标签在另⼀个对象中找不到时填充⼀个特殊值如0,将它们相加时,没有重叠的位置就会产生NA值。以下两种方法等效。
在这里插入图片描述
DataFrame和Series之间的运算
跟不同维度的NumPy数组⼀样,DataFrame和Series之间算术运算也是有明确规定的。以下计算一个二位数组和某行之间的差。当我们从arr减去arr[0],每一行都会执行这个操作。这就叫做广播(broadcasting),DataFrame和Series之间的运算差不多也是如此。

import numpy as np
arr=np.arange(12).reshape((3,4))
a=arr-arr[0]
a
#输出
array([[0, 0, 0, 0],
       [4, 4, 4, 4],
       [8, 8, 8, 8]])

默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播,(根据列做行运算,还有一个广播的功能)
也可以匹配行且在列上广播,则必须使用算术运算方法。例如:

import pandas as pd 
df = pd.DataFrame({"A":[1, 5, 3, 4, 2], 
                   "B":[3, 2, 4, 3, 4],  
                   "C":[2, 2, 7, 3, 4],  
                   "D":[4, 3, 6, 12, 7]},  
                   index =["A1", "A2", "A3", "A4", "A5"]) 
sr = pd.Series([12, 25, 64, 18], index =["A", "B", "C", "D"]) 
m=df.sub(sr,axis = 1) #采用sub()函数将 DataFrame 中的每个元素与其他 DataFrame 中的相应元素相减
m
#输出 (axis='index' or axis=0)是匹配列 行广播

A	B	C	D
A1	-11	-22	-62	-14
A2	-7	-23	-62	-15
A3	-9	-21	-57	-12
A4	-8	-22	-61	-6
A5	-10	-21	-60	-11

函数应用和映射
排序和排名
根据条件对数据集排序(sorting)也是⼀种重要的内置运算。要对行或列索引进行排序(按字典顺序),可使用sort_index方法,它将返回⼀个已排序的新对象。可按索引排序也可按值排序
带有重复标签的轴索引
索引有重复的,索引的is_unique属性可以告诉你它的值是否是唯一的

5.3 汇总和计算描述统计

hh
在这里插入图片描述
相关系数与协方差
有些汇总统计(如相关系数和协方差)是通过参数对计算出来的。

Series的corr方法⽤于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。
DataFrame的corr和cov方法将以DataFrame的形式分别返回完整的相关系数或协方差矩阵。
DataFrame的corrwith方法,你可以计算其列或行跟另⼀个Series或DataFrame之间的相关系数。

唯⼀值、值计数以及成员资格
在这里插入图片描述

5.4总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值