pandas学习教程(2):pandas系列

131 阅读6分钟
系列(Series)
是能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组。轴标签统称为索引。


Series对象是使用pandas的基础。
Series有如下特点:

  • Series对象:一维的,
    带标签的数组
    (类似字典的数组)
  • Series对象是ndarray数组的派生类型,和数组相比类型没有限制
  • Series对象本质上由两个ndarray数组构成,一个数组构成对象的键(index,索引,标签),一个数组构成对象的值(values),键 -> 值
  • Numpy中的数组运算和操作都可用于Series对象(Series本质上是ndarray)
  • Python字典操作部分可用于Series(Series内部实现的部分)



Pandas

系列可以使用以下构造函数创建


[Python]
纯文本查看
复制代码
1
pandas.Series( data, index, dtype, copy)


构造函数的参数如下:

编号参数描述
1data数据采取各种形式,如:ndarray,list,constants
2index索引值必须是唯一的和散列的,与数据的长度相同。 默认np.array(n)
如果没有索引被传递。
3dtypedtype
用于数据类型。如果没有,将推断数据类型
4copy复制数据,默认为false


可以使用各种输入创建一个系列,如
  • 数组
  • 字典
  • 标量值或常数


Series对象的操作



1,创建

  • 创建一个空系列

[Python]
纯文本查看
复制代码
1
2
3
import pandas as pd
s = pd.Series()
print(s)

执行上面代码,结果如下:

  • 从ndarray创建一个系列(无索引)
[Python]
纯文本查看
复制代码
1
2
3
4
5
import pandas as pd[/font][/color]
[/color][/font]import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data)
print(s)

执行上面代码,结果如下:

这里没有传递任何索引,因此默认情况下,它分配了从 0 到 len(data)-1
的索引,即:0到3


  • 从ndarray创建一个系列(有索引)
[Python]
纯文本查看
复制代码
1
2
3
4
5
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data,index=[100,101,102,103])
print(s)

执行上面代码,结果如下:


  • 从字典创建一个系列(字典的键用于构建索引)
[Python]
纯文本查看
复制代码
1
2
3
4
5
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data)
print(s)

执行上面代码,结果如下:


[Python]
纯文本查看
复制代码
1
2
3
4
5
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
print(s)
执行上面代码,结果如下:


  • 从标量创建一个系列
[Python]
纯文本查看
复制代码
1
2
3
4
import pandas as pd
import numpy as np
s = pd.Series(5, index=[0, 1, 2, 3])
print(s)

执行上面代码,结果如下:


  • 其他方式创建系列
[Python]
纯文本查看
复制代码
1
2
3
4
g_values = np.arange(5)
g_index = np.arange(9, 4, -1)
g = pd.Series(g_values, index = g_index)
print(g)
执行上面代码,返回结果如下:


[Python]
纯文本查看
复制代码
1
2
h = pd.Series(range(10))
print(h)

执行上面代码,结果如下:


2,查询

  • index和value查询

[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
print(s)
print('**'*10)
print(s.values)
print('**'*10)
print(s.index)
print('**'*10)
print(s.index[2])
print('**'*10)
print(s.index.values)
执行上面代码,结果如下:


  • 索引查询
[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
print(s)
print('**'*10)
# 查询单值
print(s[1]) # 位置索引,默认,自动生成,和自定义索引并存
print('**'*10)
print(s['a']) # 标签索引,自定义索引
print('**'*10)
print(s.d) # 方法调用
print('**'*10)
# 查询多值
print(s[[0,3]])
print('**'*10)
print(s[['a', 'd']])

执行上面代码,结果如下:


  • 切片
[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2., 'f': 12., 'q': 3.4, 'y': 5.6}
s = pd.Series(data,index=['b','c','d','a','f','q','y','e'])
print(s)
print('**'*10)
print(s[:4]) # 位置切片,默认索引,左闭右开
print('**'*10)
print(s[:'q']) # 标签切片,自定义索引, 注意:两边都闭区间(因为使用标签索引时通常不知道标签顺序,很难确定结束前一个标签是什么)
print('**'*10)
print(s['f':])
print('**'*10)
print(s[::2])
print('**'*10)
print(s[::-1]) #步长-1,逆序

执行上面代码,结果如下:



  • 类似ndarray的数组运算

[Python]
纯文本查看
复制代码
1
2
3
4
5
6
7
import pandas as pd
import numpy as np
s = pd.Series([100,25,59,90,61],index=['ming','hua','hong','huang','bai'])
print(s)
print('**'*10)
print(s>=60)

执行上面代码,结果如下:


[Python]
纯文本查看
复制代码
1
2
3
4
5
6
7
8
import pandas as pd
import numpy as np
s = pd.Series([100,25,59,90,61],index=['ming','hua','hong','huang','bai'])
print(s)
print('**'*10)
print(s['hua']>60)
print(s['ming']>60)

执行上面代码,结果如下:


[Python]
纯文本查看
复制代码
1
2
3
4
5
6
7
import pandas as pd
import numpy as np
s = pd.Series([100,25,59,90,61],index=['ming','hua','hong','huang','bai'])
print(s)
print('**'*10)
print(s+100) # 标量运算

执行上面代码,结果如下:


[Python]
纯文本查看
复制代码
1
2
3
4
5
6
7
8
import pandas as pd
import numpy as np
s = pd.Series([100,25,59,90,61],index=['ming','hua','hong','huang','bai'])
print(s)
print('**'*10)
print(np.median(s)) # 应用函数 , 获取中位数
print(s.median()) # 方法调用的写法

执行上面代码,结果如下:


  • 类似字典的操作
[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
import pandas as pd
import numpy as np
s = pd.Series([100,25,59,90,61],index=['ming','hua','hong','huang','bai'])
print(s)
print('**'*10)
res = 'hua' in s
print(res)
print('**'*10)
print(s.get('bai', 80))
print(s.get('hei', 80))

执行上面代码,结果如下:

3,修改

[Python]
纯文本查看
复制代码
1
2
3
4
5
6
7
8
import pandas as pd
import numpy as np
s = pd.Series([100,25,59,90,61],index=['ming','hua','hong','huang','bai'])
print(s)
print('**'*10)
s['ming'] = 0
print(s)

执行上面代码,结果如下:


[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
import pandas as pd
import numpy as np
s = pd.Series([100,25,59,90,61],index=['ming','hua','hong','huang','bai'])
print(s)
print('**'*10)
s['ming', 'hua'] = 0
print(s)
print('**'*10)
s['ming', 'hua'] = [30, 40]
print(s)

执行上面代码,结果如下:


[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
import pandas as pd
import numpy as np
s = pd.Series([100,25,59,90,61],index=['ming','hua','hong','huang','bai'])
print(s)
print('**'*10)
s.index = ['xiaoming','xiaohua','xiaohong','xiaohuang','xiaobai'] # 索引修改
print(s)
print('**'*10)
s.index.values[2] = 'laoli'
print(s)

执行上面代码,结果如下:

更多免费技术资料可关注:annalin1203