Pandas库-Series类型

​ Series类型由一组数据和与之相关的数据索引组成。

Series=Index+ndarray

默认索引

1
2
3
4
#input#
import pandas as pd
a=pd.Series([9,8,7,6])
a#显示a的信息
1
2
3
4
5
6
#output#
0 9
1 8
2 7
3 6
dtype: int64

其中左侧为索引,右侧为数据,数据类型为int64(沿用numpy数据类型)

自定义索引

1
2
3
4
#input#
import pandas as pd
b=pd.Series([9,8,7,6],index=['a','b','c','d'])
b#显示b的信息
1
2
3
4
5
6
#output#
a 9
b 8
c 7
d 6
dtype: int64

创建

可以创建Series的类型
列表
标量值
字典
ndarray
其他函数

用标量值创建

1
2
3
4
#input#
import pandas as pd
s=pd.Series(25,index=['a','b','c'])#用值25创建,index不能省略
s#显示s的信息
1
2
3
4
5
#output#
a 25
b 25
c 25
dtype: int64

用字典创建

例1

1
2
3
4
#input#
import pandas as pd
d=pd.Series({'a':9,'b':8,'c':7})
d#显示d的信息
1
2
3
4
5
#output#
a 9
b 8
c 7
dtype: int64

例2

1
2
3
4
#input#
import pandas as pd
e=pd.Series({'a':9,'b':8,'c':7},index=['c','a','b','d'])
e#输出e的信息
1
2
3
4
5
6
#output#
c 7.0
a 9.0
b 8.0
d NaN
dtype: float64

index所对应的值来源于第一个字典参数,c对应7…,d没有对应,默认NaN

用ndarray创建

例1

1
2
3
4
5
#input#
import pandas as pd
import numpy as np
n=pd.Series(np.arange(5))
n#输出n的信息
1
2
3
4
5
6
0    0
1 1
2 2
3 3
4 4
dtype: int32

例2

1
2
3
4
5
#input#
import pandas as pd
import numpy as np
m=pd.Series(np.arange(5),index=np.arange(9,4,-1))
m#输出m的信息
1
2
3
4
5
6
9    0
8 1
7 2
6 3
5 4
dtype: int32

基本操作

例1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#IPython控制台操作#
import pandas as pd

b=pd.Series([9,8,7,6],['a','b','c','d'])#创建值,指定索引

b
Out[3]:
a 9
b 8
c 7
d 6
dtype: int64

b.index
Out[4]: Index(['a', 'b', 'c', 'd'], dtype='object')#索引为pandas定义的Index类型

b.values
Out[5]: array([9, 8, 7, 6], dtype=int64)#值为numpy定义的ndarray类型

b['b']
Out[6]: 8

b[1]
Out[7]: 8

b[['c','d',0]]#索引方式需一致,不然就像下面一样报错
Traceback (most recent call last):

File "<ipython-input-8-9469556e3898>", line 1, in <module>
b[['c','d',0]]

File "E:\Anaconda\lib\site-packages\pandas\core\series.py", line 910, in __getitem__
return self._get_with(key)

File "E:\Anaconda\lib\site-packages\pandas\core\series.py", line 958, in _get_with
return self.loc[key]

File "E:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1767, in __getitem__
return self._getitem_axis(maybe_callable, axis=axis)

File "E:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1953, in _getitem_axis
return self._getitem_iterable(key, axis=axis)

File "E:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1594, in _getitem_iterable
keyarr, indexer = self._get_listlike_indexer(key, axis, raise_missing=False)

File "E:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1552, in _get_listlike_indexer
keyarr, indexer, o._get_axis_number(axis), raise_missing=raise_missing

File "E:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 1654, in _validate_read_indexer
"Passing list-likes to .loc or [] with any missing labels "

KeyError: 'Passing list-likes to .loc or [] with any missing labels is no longer supported, see https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex-listlike'


b[['c','d','a']]#一致的索引
Out[9]:
c 7
d 6
a 9
dtype: int64

例2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#IPython控制台操作#
import pandas as pd

import numpy as np

b=pd.Series([9,8,7,6],['a','b','c','d'])

b
Out[4]:
a 9
b 8
c 7
d 6
dtype: int64

b[3]
Out[5]: 6

b[:3]#切片结果仍然为Series类型,结果保留自定义索引
Out[6]:
a 9
b 8
c 7
dtype: int64

b[b>b.median()]#可以使用ndarray的操作
Out[7]:
a 9
b 8
dtype: int64

np.exp(b)
Out[8]:
a 8103.083928
b 2980.957987
c 1096.633158
d 403.428793
dtype: float64
Series类型操作和ndarray类似
索引方式相同,用[]
NumPy中的运算和操作可用于Series类型
可以通过自定义索引的列表进行切片
可以通过自动索引进行切片,如果存在自定义索引,则一同被切片

例3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#IPython控制台操作#
import pandas as pd

b=pd.Series([9,8,7,6],['a','b','c','d'])

b['b']
Out[3]: 8

'c' in b #in判断的是索引,这里为'c'是否在b的索引里面
Out[4]: True

0 in b
Out[5]: False

b.get('f',100) #如果存在索引'b',返回索引对应的值;不存在索引'b'的话,返回100
Out[6]: 100
Series类型的操作类似Python字典类型
通过自定义索引访问
保留字in操作
使用.get()方法

对齐操作

Series+Series

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#IPython控制台操作#
import pandas as pd

a=pd.Series([1,2,3],['c','d','e'])

b=pd.Series([9,8,7,6],['a','b','c','d'])

a+b
Out[4]:
a NaN
b NaN
c 8.0
d 8.0
e NaN
dtype: float64

Series类型在运算中自动对齐不同索引的数据

Series的修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import pandas as pd

b=pd.Series([9,8,7,6],['a','b','c','d'])

b['a']=15

b.name="Series"

b.index.name="索引"

b
Out[6]:
索引
a 15
b 8
c 7
d 6
Name: Series, dtype: int64

b.name="New Series"

b['b','c']=20

b
Out[9]:
索引
a 15
b 20
c 20
d 6
Name: New Series, dtype: int64
  • Series可以随时修改,立即生效
  • 可以设置Series.name和Series.index.name属性