pandas 中的Series

python 同时被 2 个专栏收录
26 篇文章 0 订阅
18 篇文章 0 订阅



import pandas as pd
import pandas as pd
import numpy as np

pandas中主要有两种数据结构,分别是:Series和DataFrame。

(1)Series:一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。注意:Series中的索引值是可以重复的。

(2)DataFrame:一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。

1、series 的创建

(1)Series:通过一维数组创建

(2)Series:通过字典的方式创建

(3)修改索引值

# series 的创建:数组方式
arr=np.array([1,3,5,np.NaN,10])
ser1=pd.Series(arr)
print(ser1)
# 获取series的元素的数据类型
print(ser1.dtype)
# 获取series的索引
print(ser1.index)
# 获取series的值
print(ser1.values)
0     1.0
1     3.0
2     5.0
3     NaN
4    10.0
dtype: float64
float64
RangeIndex(start=0, stop=5, step=1)
[  1.   3.   5.  nan  10.]
# 通过index修改索引值,且索引值可以重复
ser2=pd.Series([98,99,90])
ser2.index=['语文','数学','语文']
print(ser2)
ser3=pd.Series(data=[99,98,97],dtype=np.float64,index=['语文','数学','历史'])
print(ser3)
语文    98
数学    99
语文    90
dtype: int64
语文    99.0
数学    98.0
历史    97.0
dtype: float64
# 通过字典的方式创建series,字典的key为series的索引值,字典的values为series的元素值
dit={'语文':90,'数学':99,'历史':98}
ser4=pd.Series(dit)
print(ser4)
历史    98
数学    99
语文    90
dtype: int64

2 、Series值的获取

Series值的获取主要有两种方式:

(1)通过方括号+索引的方式读取对应索引的数据,有可能返回多条数据

(2)通过方括号+下标值的方式读取对应下标值的数据,下标值的取值范围为:[0,len(Series.values)];另外下标值也可 以是负数,表示从右往左获取数据

Series获取多个值的方式类似NumPy中的ndarray的切片操作,通过方括号+下标值/索引值+冒号(:)的形式来截取series对象中的一部分数据!

# Series数据的获取:下标值、索引值、切片
print('==============ser4[1]==============')
print(ser4[1])
print('==============ser4["语文"]=========')
print(ser4["语文"])
print('==============ser4[0:2]============')
print(ser4[0:2])
print("==============ser4['历史':'语文']===")
print(ser4['历史':'语文'])
==============ser4[1]==============
99
==============ser4["语文"]=========
90
==============ser4[0:2]============
历史    98
数学    99
dtype: int64
==============ser4[u'历史':u'语文']===
历史    98
数学    99
语文    90
dtype: int64

3、Series的运算

NumPy中的数组运算,在Series中都保留了,均可以使用,并且Series进行数组运算的时候,索引与值之间的映射关系不会发生改变。

注意:其实在操作Series的时候,基本上可以把Series看成NumPy中的ndarray数组来进行操作。ndarray数组的绝大多数操作都可以应用到Series上。

# series的部分运算
print('==============ser4[ser4>98] 布尔运算=========')
print(ser4[ser4>98])
print('==============ser4/9 除法运算================')
print(ser4/9)
print('==============np.exp(ser4) e的x次方==========')
print(np.exp(ser4))
print('==============np.log10(ser4)   ========')
print(np.log10(ser4))
==============ser4[ser4>98] 布尔运算=========
数学    99
dtype: int64
==============ser4/9 除法运算================
历史    10.888889
数学    11.000000
语文    10.000000
dtype: float64
==============np.exp(ser4) e的x次方==========
历史    3.637971e+42
数学    9.889030e+42
语文    1.220403e+39
dtype: float64
==============np.log10(ser4)   ========
历史    1.991226
数学    1.995635
语文    1.954243
dtype: float64
# 在pandas中用NaN表示一个缺省值或者NA值
print('==============ser4================')
print(ser4)
ser5=pd.Series(ser4,index=['地理','语文','历史','数学'])
print('==============ser5================')
print(ser5)
==============ser4================
历史    98
数学    99
语文    90
dtype: int64
==============ser5================
地理     NaN
语文    90.0
历史    98.0
数学    99.0
dtype: float64

4、Series缺失值检测

pandas中的isnull和notnull两个函数可以用于在Series中检测缺失值,这两个函数的返回时一个布尔类型的Series

print('==============pd.isnull(ser5)================')
print(pd.isnull(ser5))
print('==============ser5[pd.isnull(ser5)]===========')
print(ser5[pd.isnull(ser5)])
print('==============pd.notnull(ser5)================')
print(pd.notnull(ser5))
print('==============ser5[pd.notnull(ser5)]==========')
print(ser5[pd.notnull(ser5)])
==============pd.isnull(ser5)================
地理     True
语文    False
历史    False
数学    False
dtype: bool
==============ser5[pd.isnull(ser5)]===========
地理   NaN
dtype: float64
==============pd.notnull(ser5)================
地理    False
语文     True
历史     True
数学     True
dtype: bool
==============ser5[pd.notnull(ser5)]==========
语文    90.0
历史    98.0
数学    99.0
dtype: float64

5、Series自动对齐

当多个series对象之间进行运算的时候,如果不同series之间具有不同的索引值,那么运算会自动对齐不同索引值的数据,如果某个series没有某个索引值,那么最终结果会赋值为NaN。

ser6=pd.Series(data=[99,98,97],index=['语文','数学','历史'])
ser7=pd.Series(data=[99,98,97,100],index=['语文','数学','历史','文言文'])
print('==============ser6+ser7================')
print(ser6+ser7)
print('==============ser6-ser7================')
print(ser6-ser7)
print('==============ser6*ser7================')
print(ser6*ser7)
print('==============ser6/ser7================')
print(ser6/ser7)
print('==============ser6**ser7================')
print(ser6**ser7)
==============ser6+ser7================
历史     194.0
数学     196.0
文言文      NaN
语文     198.0
dtype: float64
==============ser6+ser7================
历史     0.0
数学     0.0
文言文    NaN
语文     0.0
dtype: float64
==============ser6+ser7================
历史     9409.0
数学     9604.0
文言文       NaN
语文     9801.0
dtype: float64
==============ser6+ser7================
历史     1.0
数学     1.0
文言文    NaN
语文     1.0
dtype: float64
==============ser6+ser7================
历史     5.210246e+192
数学     1.380878e+195
文言文              NaN
语文     3.697296e+197
dtype: float64

6、Series及其索引的name属性

Series对象本身以及索引都具有一个name属性,默认为空,根据需要可以进行赋值操作

ser8=pd.Series(data=[99,98,97],index=['Dov','Drld','Heil'])
ser8.name='语文'
ser8.index.name='考试成绩'
print(ser8)
考试成绩
Dov     99
Drld    98
Heil    97
Name: 语文, dtype: int64
  • 1
    点赞
  • 0
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值