本文主要是介绍9/2 pandas数据结构介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
5.1.2 DataFrame
1.是二维的矩形数据表,既有行索引又有列索引,从某一维度来看可看作Series
2.常用的创建方式是传入一个由列表或numpy数组组成的字典
data为一个字典
frame = pd.DataFram(data)
3.返回前5行:fram.head() 后五行:fram.tail()
4.可通过指定columns字段指定列索引字段顺序
frame = pd.DataFram(data,columns= )
5.可根据标签获取指定行列
frame[字段或序号]或frame.字段
6.当给frame某行或列赋值时,使用frame[标签]=标量/数组/列表进行赋值
也可将Series赋给frame某行或列,此时标签索引要匹配,若不匹配无法完成赋值
7.创建新列:frame[索引]
8.删除某列:del frame[索引]
9.DataFrame的index表示行索引,columns表示列索引
10.frame.to_numpy()将DataFrame形式以二维数组的形式返回
5.1.3索引对象
pandas的索引标签序列都属于是索引对象,不能对其进行修改
索引可包含重复标签
5.2 基本功能
5.2.1 重建索引
reindex方法
1.对Series重建索引
obj = pd.Series([1, 2, 3]) obj1 = obj.reindex([1, 2, 3], method="ffill") obj2 = obj.reindex([4, 5, 6]) print(obj) 生成: 0 1 1 2 2 3 dtype: int64print(obj1) 生成: 1 2 2 3 3 3 dtype: int64print(obj2)
生成:
4 NaN
5 NaN
6 NaN
dtype: float64
注:重构时索引匹配才能得到相应的值,若不匹配得到空值
2.对DataFrame重建索引
DataFrame为矩形,重建时指明行列
f2 = f.reindex(index=[]或索引序列) 改变行标签
f2 = f.reindex(columns=[]或索引序列) 改变列标签
或
f2 = f.reindex(待改序列,axis="index") 改变行标签
f2 = f.reindex(待改序列,axis="columns") 改变列标签
注:在重构时,标签只含新的指定序列中的标签,新的和原来的匹配则保留,不匹配则删除原来的,添加新的。重构索引也可以用于删除某标签
5.2.2 删除指定轴上的项
drop()
1.对于Series
obj = pd.Series([1, 2, 3], index=["a", "b", "c"])
obj1 = obj.drop("a")
直接根据索引删除
2.对于DataFrame
需要指定删除的是index还是columns
data.drop(index=["a”,“b"])#删除a行和b行
data.drop(columns=["a”,“b"])#删除a列和b列
或
data.drop(["a”,“b"],axis="index或columns")
5.2.3 索引、选取和过滤
1.对series
1.1[]选取
obj = pd.Series([1, 2, 3], index=["a", "b", "c"])
obj["a"] == obj[0]
obj[:2] == obj[["a", "b"]]
即对Series元素进行提取可用指定的index标签,也可以数字序号
1.2 loc[]与iloc[]
loc运算符只能用标签
iloc只能用整数,就算标签不是整数,也能用整数调用
obj = pd.Series([1, 2, 3], index=["a", "b", "c"])
obj.loc["a"] == obj.iloc[0]
obj.loc["a": "b"] == obj.iloc[0:2]
注:loc切片包含末端,iloc不包含
2.对DataFrame
1.[]方式 p141
data1 = pd.DataFrame(np.arange(16).reshape((4, 4)),index=["a", "b", "c", "d"],columns=["one", "two", "three", "four"])
data1[]这种方式用于提取列,[]中一般放置列标签
loc和iloc可用于提取行
陷阱:
当Series的索引为整数索引时,不能用data[-i]来提取数据
担当索引不为整数索引时,可用data[-1]来提取最后一个数据
5.2.4 算术运算和数据对齐
1.对于Series :当对象相加时,如果存在不同的索引对,则结果的索引是所有索引的并集,对于不重叠的标签,会导致缺失值 obj1 + obj2
2.对于DataFrame:会将行和列的索引同时进行匹配,得到的行列索引是所有索引的并集,不重叠的标签,会导致缺失值
3.填充值
索引不匹配时会有缺失值NaN,可使用fill_value参数设置填充值
obj1.add(obj2, fill_value=0)
算术方法:p150
4.DataFrame与Series间的运算
1.匹配对应的索引值,对匹配的索引的值进行运算,若索引不匹配则会重构索引,缺失的值出现NaN
一般用[]形式获取一列数据(由多行组成),loc或iloc方式获取一行数据(由多列组成)
当获得一行数据作为Series进行运算实际上是对各列进行运算
1.1取一行作为Series
data1 = pd.DataFrame(np.arange(16).reshape((4, 4)),index=["a", "b", "c", "d"],columns=["one", "two", "three", "four"]) s1 = data1.iloc[0] #获得一行数据 print(s1) print(data1 - s1) ==print(data1.sub(s1, axis="columns"))
出现:
s1为:
one 0
two 1
three 2
four 3
我感觉把Series看做横向排列的可能会更有助于理解
one two three four
a 0 0 0 0
b 4 4 4 4
c 8 8 8 8
d 12 12 12 12
相当于DataFrame的one列各值都减去Series的one值,各列以此类推
1.1取一列作为Series
data1 = pd.DataFrame(np.arange(16).reshape((4, 4)),index=["a", "b", "c", "d"],columns=["one", "two", "three", "four"]) s1 = data1["one"] print(s1) print(data1 - s1) print(data1.sub(s1, axis="index"))
s1:
a 0
b 4
c 8
d 12
还是把获取的Series看作横向
类似:
a b c d
0 4 8 12
此时,print(data1 - s1)出现索引不匹配情况,索引重构
a b c d four one three two
a NaN NaN NaN NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN NaN NaN NaN
d NaN NaN NaN NaN NaN NaN NaN NaN
而data1.sub(s1, axis="index")表示对各行进行操作
one two three four
a 0 1 2 3
b 0 1 2 3
c 0 1 2 3
d 0 1 2 3
a行减a值,b行减b值,c行减c值
5.2.5 函数应用和映射
1.numpy很多函数可用于pandas对象
2.可自定义许多函数,用apply方法将函数运用于各行各列
运用于行还是列用axis参数指定
3.将Frame中的浮点数格式化可用applymap函数
5.2.6 排序与排名
1.排序
1.1 sort_index方法
根据索引进行排序,默认升序,可用参数ascending=False实现降序
s指代一个Series,f指代一个DataFrame
s.sort_index() 根据索引标签排序
f.sort_index() 根据index排序
f.sort_index(axis="columns", ascending=False) 根据columns排序
1.2 sort_values方法
根据值对对象进行排序
s.sort_values()
缺失值会被排到最后,设置na_position参数将缺失值放在最前面
对DataFrame排序时,可用一列或多列作为排序键
f.sort_values(列标签)
f.sort_values([列标签,列标签]) #多列
2.排名 p157
rank方法
排名是从数组中的最小值开始,从一开始给各数据进行排名,相同的值会平级,可通过设置method参数打破平级
5.2.7 带有重复标签的轴索引
pandas对象的索引不要求唯一,可用is_unique属性来说明索引值是否唯一
s.index.is_unique #true或false
5.3 描述性统计的汇总和计算 p159
1.sum方法
f.sum() #求竖着的总和
f.sum(axis="columns") #求横着的总和
关于NA值,若某行某列全为NA值则和为0,若有NA值也有其他值则跳过NA值,若不跳过设置参数skipna来改变
f.sum(axis="columns",skipna=False ) #设置后只要有na值就为na
2.mean方法
求平均值
f.mean() #通过设置axis来表示求行还是求列
3.idmax和idmax:返回最大最小值索引
f.idmax()
4.describe方法
f.describe() #对f的状况进行描述
这篇关于9/2 pandas数据结构介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!