织梦商城网站模板,电商运营培训班,凡科网站是骗子,软件开发建设网站前言
大家好#xff01;本期跟大家分享的知识是 Pandas 数据结构—Series。
一、Series的创建
Series 是一种类似于一维数组的对象#xff0c;由下面两部分组成#xff1a;
values#xff1a;一组数据#xff0c;ndarray 类型index#xff1a;数据索引 顾名思义…前言
大家好本期跟大家分享的知识是 Pandas 数据结构—Series。
一、Series的创建
Series 是一种类似于一维数组的对象由下面两部分组成
values一组数据ndarray 类型index数据索引 顾名思义我们在创建 Series 对象时需要传递一组数据该数据大多数时候是可迭代对象。因此下面三种创建方式都是将数据传入到 Series 方法中。
1.1 列表数组创建
以列表作为数据创建 Series。
list1 list(ABCD) # 创建列表
s pd.Series(list1) # 传递列表数据到 Series 方法中
print(s)
print(type(s.values))
print(type(s.index))
###########结果###########
0 A
1 B
2 C
3 D
dtype: object
class numpy.ndarray
class pandas.core.indexes.range.RangeIndex以数组作为数据创建 Series。
n np.array(range(5,10))
s2 pd.Series(n)
s2
###########结果###########
0 5
1 6
2 7
3 8
4 9
dtype: int321.2 字典创建 前两种方式都是只传递了数据那么索引是默认索引0 ~ N-1下面的字典创建方式则是以字典的键为索引字典的值为数据。 d {
a:11,b:22,c:33,d:44
}
s pd.Series(d)
s
###########结果###########
a 11
b 22
c 33
d 44
dtype: int641.3 通过标量创建
s pd.Series(100,indexrange(5))
s
###########结果###########
0 100
1 100
2 100
3 100
4 100
dtype: int64二、Series索引
从以上 Series 的创建中我们可以看出Series 的索引是可以修改的 。我们先来探讨以下索引的作用。 获取元素有多种获取方式s.索引名s[‘索引名’]s.loc[‘索引名’] 允许修改为 s.index 重新赋值即可注意前后数量一致 显式即表示使用索引名称的方式隐式即表示使用序号的方式。后面的显式切片和隐式切片也是同理。 2.1 显式索引
取单个值时三种方式假设 Series 对象名为 s
s.索引名数字索引不能用这种方式s[‘索引名’]s.loc[‘索引名’]
取多个值时返回一个新的 Series 对象两种方式也就是加中括号
s.[[‘索引名1’,‘索引名2’]]s.loc[[‘索引名1’,‘索引名2’]]
s pd.Series(np.array(range(5,10)),indexlist(abcde),namenumber)
print(s)
display(s.a,s[a],s.loc[a])
###########结果###########
a 5
b 6
c 7
d 8
e 9
Name: number, dtype: int325552.2 隐式索引
隐式索引和显示索引的区别就是它通过数字来获取值。因为是数字因此 s.number 这种方式肯定 不能用了 其他都相同。
取单值两种方式
s[number]s.iloc[number]
取多值两种方式
s[[number1,number2]]s.iloc[[number1,number2]]
s pd.Series(np.array(range(5,10)),indexlist(abcde),namenumber)
print(s)
print(取单值)
print(s[1])
print(s.iloc[1])
print(取多值)
print(s[[1,2]])
print(s.iloc[[1,2]])
###########结果###########
a 5
b 6
c 7
d 8
e 9
Name: number, dtype: int32
a 5
b 6
c 7
d 8
e 9
Name: number, dtype: int32
取单值
6
6
取多值
b 6
c 7
Name: number, dtype: int32
b 6
c 7
Name: number, dtype: int32三、Series切片
切片操作是获取一个新的 Series 对象的操作显式切片是为左闭右闭隐式切片时为左闭右开。
2.1 显式切片
两种方式
s[索引名1索引名2]s.loc[索引名1索引名2]
2.2 隐式切片
两种方式
s[number1number2]s.iloc[number1number2]
s pd.Series({
yw:100,
math:150,
eng:110,
Python:130
})
print(数据,end)
print(-*10)
print(s)
print(-*10)
print(显式切片)
print(s[yw:math])
print(-*10)
print(s.loc[yw:math])
print(-*10)
print(隐式切片)
print(s[0:1])
print(-*10)
print(s.iloc[0:1])
###########结果###########
数据----------
yw 100
math 150
eng 110
Python 130
dtype: int64
----------
显式切片
yw 100
math 150
dtype: int64
----------
yw 100
math 150
dtype: int64
----------
隐式切片
yw 100
dtype: int64
----------
yw 100
dtype: int64四、Series基本属性和方法
Series基本属性和方法是让我们更好了解数据组成的手段。
4.1 属性
属性作用s.shape查看数据行列s.ndim查看维度Series 就是一维ndim 恒等于1s.size查看数据总数s.index查看索引s.values查看数据s.name查看 Series 对象的 name若未设定则为空
4.2 方法
方法功能s.head()查看前5条数据若传入数字 n 则查看前 n 条s.tail()查看后5条数据若传入数字 n 则查看后 n 条s.isnull()判断数据是否为空空的为 True 不空的为 Falses.notnull()判断数据是否不空空的为 False 不空的为 True
4.3 案例——使用 bool 值去除空值
原理Series 切片可以再传入一个 Series 对象该 Series 对象索引要和原来相同那么值为 False 的将不会被取出。
请看示例
s pd.Series([a,e,f,b])
s[pd.Series([True,True,False,True])]
###########结果###########
0 a
1 e
3 b
dtype: object如果改为
s pd.Series([a,e,f,b])
s[pd.Series([True,True,False,True],indexlist(abcd))]
###########结果###########那么将会报错
IndexingError Traceback (most recent call last)
E:\Temp/ipykernel_15804/3537358820.py in module1 s pd.Series([a,e,f,b])
---- 2 s[pd.Series([True,True,False,True],indexlist(abcd))]D:\PF\Anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key)1001 1002 if com.is_bool_indexer(key):
- 1003 key check_bool_indexer(self.index, key)1004 key np.asarray(key, dtypebool)1005 return self._get_values(key)D:\PF\Anaconda3\lib\site-packages\pandas\core\indexing.py in check_bool_indexer(index, key)2550 indexer result.index.get_indexer_for(index)2551 if -1 in indexer:
- 2552 raise IndexingError(2553 Unalignable boolean Series provided as 2554 indexer (index of the boolean Series and of IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).下面是 Series 去除空值的案例。
s pd.Series([zhangsan,lisi,a,np.NAN,None])
print(数据-*10)
print(s)
conditon s.isnull()
print(判空情况-*10)
print(conditon)
# 使用 bool 值索引过滤数据
s s[~conditon]
print(过滤结果-*10)
print(s)
###########结果###########
数据----------
0 zhangsan
1 lisi
2 a
3 NaN
4 None
dtype: object
判空情况----------
0 False
1 False
2 False
3 True
4 True
dtype: bool
过滤结果----------
0 zhangsan
1 lisi
2 a
dtype: object五、Series运算
Series 运算包括算术运算和 Series 对象之间运算。算术运算是针对每一个元素的有 、-、*、/、 //、 %、 ** 等这里不再赘述。Series 对象间的运算只要记住索引一个有一个没有时计算值为 NaN其他按照算术运算计算即可。
算术运算
s pd.Series(np.array(range(5,10)))
print(s)
s * 10
###########结果###########
0 5
1 6
2 7
3 8
4 9
dtype: int320 50
1 60
2 70
3 80
4 90
dtype: int32Series对象间的运算
s1 pd.Series(np.array(range(5,10)))
s2 pd.Series([3,6,10,12])
print(s1)
print(s2)
s1 s2 # 索引一个有一个没有时计算值为 NaN
###########结果###########
0 5
1 6
2 7
3 8
4 9
dtype: int32
0 3
1 6
2 10
3 12
dtype: int640 8.0
1 12.0
2 17.0
3 20.0
4 NaN
dtype: float64六、Series多层行索引
6.1 Series多层索引的构建
Series 不仅支持单层索引还支持多层索引。最简单的实现方式就是将 index 设置成多维。
下面以二级行索引为例
s pd.Series(np.random.randint(60,100,6),index[[语文,语文,语文,数学,数学,数学],[小明,小红,小丽,小明,小红,小丽]])
print(s)
###########结果###########
语文 小明 90小红 72小丽 97
数学 小明 81小红 74小丽 84
dtype: int326.2 Series多层索引的索引和切片操作
对于 Series 多层索引的索引和切片操作只要记住以下两点
要先取第一层再取第二层不能直接取第二层索引获取到第一层之后就是一个普通的单层索引 Series隐式索引直接得到数
具体的方式还是索引和切片都分为显式和隐式下面通过一个案例来演示。
索引
s pd.Series(np.random.randint(60,100,6),index[[语文,语文,语文,数学,数学,数学],[小明,小红,小丽,小明,小红,小丽]])
print(s)
# 索引
print(显式索引-*10)
print(s[语文]) # 获取到单层 Series
print(s.loc[语文])
print(s[语文][小明],s.loc[语文][小明]) # 获取到单个值
print(隐式索引-*10)
print(s.iloc[0])
print(s[0]) # 获取到单个值
###########结果###########
语文 小明 94小红 95小丽 60
数学 小明 66小红 84小丽 76
dtype: int32
显式索引----------
小明 94
小红 95
小丽 60
dtype: int32
小明 94
小红 95
小丽 60
dtype: int32
94 94
隐式索引----------
94
94切片
s pd.Series(np.random.randint(60,100,6),index[[语文,语文,语文,数学,数学,数学],[小明,小红,小丽,小明,小红,小丽]])
s s.sort_index()
print(s)
print(显式切片-*10)
print(s[数学:语文])
print(s.loc[数学:语文])
print(隐式切片-*10)
print(s[0:2])
print(s.iloc[0:2])
###########结果###########
数学 小丽 67小明 64小红 92
语文 小丽 84小明 99小红 82
dtype: int32
显式切片----------
数学 小丽 67小明 64小红 92
语文 小丽 84小明 99小红 82
dtype: int32
数学 小丽 67小明 64小红 92
语文 小丽 84小明 99小红 82
dtype: int32
隐式切片----------
数学 小丽 67小明 64
dtype: int32
数学 小丽 67小明 64
dtype: int32结语 本期跟大家分享的 “芝士” 就到此结束了关于 Series 数据结构你学会了吗✨ 我是南晨曦在学习的路上一直前行期待与你一起进步。~
如果文中有些地方不清楚的话欢迎联系我我会给大家提供思路及解答。
参考文档
python数据分析Pandas之Series