Data Science | 时间序列的索引与切片

简介: Data Science | 时间序列的索引与切片

时间序列的索引与切片

索引

时间序列的索引方法同样是适用于Dataframe,而且在时间序列中由于按照时间先后排序,故不用考虑顺序问题。

基本位置索引,使用的方法和列表类似:

from datetime import datetime
rng = pd.date_range('2017/1','2017/3')
ts = pd.Series(np.random.rand(len(rng)), index = rng)
print(ts.head())
print(ts[0])
print(ts[:2])
>>>
2017-01-01    0.107736
2017-01-02    0.887981
2017-01-03    0.712862
2017-01-04    0.920021
2017-01-05    0.317863
Freq: D, dtype: float64
0.107735945027
2017-01-01    0.107736
2017-01-02    0.887981
Freq: D, dtype: float64

除了基本位置索引之外还有时间序列标签索引:

from datetime import datetime
rng = pd.date_range('2017/1','2017/3')
ts = pd.Series(np.random.rand(len(rng)), index = rng)
print(ts['2017/1/2'])
print(ts['20170103'])
print(ts['1/10/2017'])
print(ts[datetime(2017,1,20)])
>>>
0.887980757812
0.712861778966
0.788336674948
0.93070380011
切片

切片的使用操作在上面索引部分的基本位置索引中有提到和Series按照index索引原理一样,也是末端包含。

rng = pd.date_range('2017/1','2017/3',freq = '12H')
ts = pd.Series(np.random.rand(len(rng)), index = rng)
print(ts['2017/1/5':'2017/1/10'])
>>>
2017-01-05 00:00:00    0.462085
2017-01-05 12:00:00    0.778637
2017-01-06 00:00:00    0.356306
2017-01-06 12:00:00    0.667964
2017-01-07 00:00:00    0.246857
2017-01-07 12:00:00    0.386956
2017-01-08 00:00:00    0.328203
2017-01-08 12:00:00    0.260853
2017-01-09 00:00:00    0.224920
2017-01-09 12:00:00    0.397457
2017-01-10 00:00:00    0.158729
2017-01-10 12:00:00    0.501266
Freq: 12H, dtype: float64
# 在这里我们可以传入月份可以直接获取整个月份的切片
print(ts['2017/2'].head())
>>>
2017-02-01 00:00:00    0.243932
2017-02-01 12:00:00    0.220830
2017-02-02 00:00:00    0.896107
2017-02-02 12:00:00    0.476584
2017-02-03 00:00:00    0.515817
Freq: 12H, dtype: float64
重复索引的时间序列
dates = pd.DatetimeIndex(['1/1/2015','1/2/2015','1/3/2015','1/4/2015','1/1/2015','1/2/2015'])
ts = pd.Series(np.random.rand(6), index = dates)
print(ts)
# 我们可以通过is_unique检查值或index是否重复
print(ts.is_unique,ts.index.is_unique)
>>>
2015-01-01    0.300286
2015-01-02    0.603865
2015-01-03    0.017949
2015-01-04    0.026621
2015-01-01    0.791441
2015-01-02    0.526622
dtype: float64
True False

按照上面的结果,可以看出在上面的时间序列中,出现了index(ts.index.is_unique)重复但值(ts.is_unique)不重复的情况。

我们可以通过时间序列把重复索引对应的值取平均值来解决索引重复的问题:

print(ts.groupby(level = 0).mean())
# 通过groupby做分组,重复的值这里用平均值处理
>>>
2015-01-01    0.545863
2015-01-02    0.565244
2015-01-03    0.017949
2015-01-04    0.026621
dtype: float64

巩固习题

1:如图创建时间序列(10*3,值为0-100的随机数),通过索引得到以下值:

① 索引得到前4行的所有值

② 索引得到2017-12-4 12:00:00的数据

③ 索引得到2017-12-4 - 2017-12-5的数据

相关文章
|
2月前
Google Earth Engine(GEE)——用填充后的Landsat7影像进行LST地表温度计算(C值转化为K值)
Google Earth Engine(GEE)——用填充后的Landsat7影像进行LST地表温度计算(C值转化为K值)
34 2
|
8月前
|
索引 Python
Data Science | 这些时间序列的骚操作啊
Data Science | 这些时间序列的骚操作啊
|
8月前
|
存储 机器学习/深度学习 数据可视化
Series(序列)
Series(序列)是数学和统计学中的概念,表示按照一定规律排列的一组数据。在计算机科学和数据分析领域,Series也是指一种数据结构,用于存储一维数据,并具有标签或索引。
94 2
|
8月前
|
存储 Python
​Data Science | 福利列表 | Numpy基础(三)
​Data Science | 福利列表 | Numpy基础(三)
|
10月前
|
存储 关系型数据库 数据挖掘
R语言-Chunk大型数据框与稀疏矩阵应对 as.matrix溢出异常 “problem too large”
本文提出一种在R里面将大型数据集通过分块的方式转换出 DataFrame和 SparseMatrix的方法,能有效避免内存溢出、程序崩溃等严重问题。
133 0
|
PyTorch 算法框架/工具
如何将x_data和y_data利用torch转换成小批量数据,并要求打乱数据,如何处理?
首先,使用TensorDataset将x_data和y_data合并到一个数据集中。然后,使用DataLoader创建一个迭代器,以便逐个处理每个小批量数据。在这里,batch_size设置为2,这意味着每个小批量将包含2个样本。shuffle参数设置为True,表示要对数据进行随机打乱。在遍历每个小批量数据时,可以在循环体内执行训练或评估操作。
147 0
|
PyTorch 算法框架/工具
如何将x_data和y_data利用torch转换成小批量数据,并要求打乱数据,以及将数据标准化或者归一化,如何处理?
以上代码中,在定义预处理操作transform时,只在Normalize函数的第一个参数中传入x_data的均值和标准差,而在第二个参数中传入空元组,表示不对y_data进行标准化。 接着,将标准化后的x_data和原始的y_data转换为张量格式,并将它们合并为一个TensorDataset对象。最后,定义dataloader对象,设置batch_size和shuffle参数,并使用上述数据集对象作为输入数据。
259 0
Google Earth Engine ——HYCOM 数据子集包含变量海洋温度数据集
Google Earth Engine ——HYCOM 数据子集包含变量海洋温度数据集
1182 0
|
机器学习/深度学习 人工智能 计算机视觉
|
数据挖掘 索引 Python
【Python数据分析 - 12】:Series结构、pandas中值的获取和修改、切片操作与排序(pandas篇)
【Python数据分析 - 12】:Series结构、pandas中值的获取和修改、切片操作与排序(pandas篇)
175 0
【Python数据分析 - 12】:Series结构、pandas中值的获取和修改、切片操作与排序(pandas篇)

热门文章

最新文章