Pandas-Series 笔记
- pandas 是建立在Numpy基础之上的
- 两大数据结构: 一纬: Series, 二维: DataFrame
Series数据类型: index + values
1. 生成
- pd.Series(可迭代对象list, tuple等) –> 默认index是 0, 1, 2…
- pd.Series(somevalues, index = 可迭代对象list, tuple. )
- pd.Series( adict ) –> 字典键值对被转化为 index value 对
- 可以指定dtype=类型
- 获得indexs和values
- pd_series.index
- pd_series.values
import pandas as pd
import numpy as np
s1 = pd.Series()
print(s1)
Series([], dtype: float64)
s2 = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])
s2
a 1
b 3
c 5
d 7
e 9
dtype: int64
s2.values
array([1, 3, 5, 7, 9])
s2.index
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
s2['f'] = 11
s2
a 1
b 3
c 5
d 7
e 9
f 11
dtype: int64
s3 = pd.Series({'a': 4, 'b': 3, 'c': 2, 'd': 1})
s3
a 4
b 3
c 2
d 1
dtype: int64
s4 = pd.Series(range(10))
s4
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
dtype: int64
pd.Series(np.random.randn(5))
0 -1.802035
1 -0.072000
2 0.393246
3 1.237728
4 1.041300
dtype: float64
2. 索引
- obj.head(n=5) # 默认查看对象前5 个数据
- obj.tail(n=5) # 默认查看对象后5 个数据
- obj.take(index) # 提取指定index标签位置的数据, 可以传递一个index 数组
- obj[i] # 获得指定 i索引位置 的数据
- obj[index] # 提取指定 index标签 位置的数据
s4.head()
0 0
1 1
2 2
3 3
4 4
dtype: int64
s4.head(3)
0 0
1 1
2 2
dtype: int64
s4.tail()
5 5
6 6
7 7
8 8
9 9
dtype: int64
sss = s4.take([3, 6, 8])
print(ss)
1
s2
a 1
b 3
c 5
d 7
e 9
f 11
dtype: int64
s2 = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])
print(s2[1] is s2['b'])
print(s2[1] is s2[1])
print(s2['c'] is s2[2])
print(s2[1] == s2['b'])
print(s2[[0, 1, 2]] == s2[['a', 'b', 'c']])
s2
False
False
False
True
a True
b True
c True
dtype: bool
a 1
b 3
c 5
d 7
e 9
dtype: int64
s22 = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])
s2['b'] = 'ccc'
print(s2[1] is s2['b'])
print(s2[1] is s2[1])
print(s2['c'] is s2[2])
print(s2[1] == s2['b'])
print(s2[[0, 1, 2]] == s2[['a', 'b', 'c']])
s2
True
True
True
True
a True
b True
c True
dtype: bool
a 1
b ccc
c 5
d 7
e 9
dtype: object
3. 切片
- 标签切片会包括 起始和 终止 两个位置的元素(因为通常不知道下一个标签是什么)
- 位置切片遵循Python切片规则
- 创建时没有指定index标签的, 标签==位置索引
- 当标签为数字, 但无规律的时候, 数字切片用的是位置索引
s4[0:3]
0 0
1 1
2 2
dtype: int64
s5 = pd.Series(['a', 'b', 'c', 'd', 'e', 'f'], index=range(5,-1, -1))
s5
5 a
4 b
3 c
2 d
1 e
0 f
dtype: object
s5[:2]
5 a
4 b
dtype: object
s2['a':'c']
a 1
b 3
c 5
dtype: int64
时间序列
- index取值为时间戳, 设置为Timestamp对象
- pd.Timestamp() 可以传入str类型, 也可以传入datatime类型的数据
- pd.to_datetime(atimelist)— 可以转化一个可迭代对象内元素为 Timestamp对象
- datetime对象可以直接作为index, pandas会自动将其转换为Timestamp对象
from datetime import datetime
date1 = datetime(2016, 1, 1)
date2 = pd.Timestamp(date1)
date2
Timestamp('2016-01-01 00:00:00')
type(date2)
pandas._libs.tslib.Timestamp
ts = pd.Series([1, 2, 3], index=pd.to_datetime([
'2017-08-09',
'2017-08-10',
'2017-08-11'
]))
ts
2017-08-09 1
2017-08-10 2
2017-08-11 3
dtype: int64
print(ts['20170809'])
print('-'*15)
print(ts['2017-08-09'])
print('-'*15)
print(ts['08/09/2017'])
1
---------------
1
---------------
1
print(ts['20170810': '20170811'])
2017-08-10 2
2017-08-11 3
dtype: int64
ts.truncate(after='20170809')
2017-08-09 1
dtype: int64
print(ts.shift(1))
print('-'*30)
print(ts.shift(-1))
2017-08-09 NaN
2017-08-10 1.0
2017-08-11 2.0
dtype: float64
------------------------------
2017-08-09 2.0
2017-08-10 3.0
2017-08-11 NaN
dtype: float64