整述:
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构造函数所能接受的各种数据
索引对象
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)
m
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总结
Original: https://blog.csdn.net/weixin_46127755/article/details/124476909
Author: mreturn0
Title: 第5章 pandas入门
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/751014/
转载文章受原作者版权保护。转载请注明原作者出处!