📜  熊猫 |时间序列操作基础

📅  最后修改于: 2022-05-13 01:54:56.341000             🧑  作者: Mango

熊猫 |时间序列操作基础

虽然时间序列也可以在 scikit-learn 中使用,但 Pandas 具有某种编译的更多功能。在 Pandas 的这个模块中,我们可以包含每条记录的日期和时间,并可以获取数据帧的记录。我们可以使用名为Time series的 pandas 模块找出一定日期和时间范围内的数据。让我们讨论一些主要目标来介绍 pandas 时间序列分析。
时间序列分析的目标

  • 创建日期系列
  • 使用数据时间戳
  • 将字符串数据转换为时间戳
  • 使用时间戳对数据进行切片
  • 为不同的时间段聚合/汇总统计重新采样您的时间序列
  • 处理缺失的数据

现在,让我们对一些数据做一些实际的分析,来演示pandas时间序列的使用。
代码#1:

Python3
import pandas as pd
from datetime import datetime
import numpy as np
 
range_date = pd.date_range(start ='1/1/2019', end ='1/08/2019',
                                                   freq ='Min')
print(range_date)


Python3
import pandas as pd
from datetime import datetime
import numpy as np
 
range_date = pd.date_range(start ='1/1/2019', end ='1/08/2019',
                                                   freq ='Min')
print(type(range_date[110]))


Python3
import pandas as pd
from datetime import datetime
import numpy as np
 
range_date = pd.date_range(start ='1/1/2019', end ='1/08/2019',
                                                   freq ='Min')
 
df = pd.DataFrame(range_date, columns =['date'])
df['data'] = np.random.randint(0, 100, size =(len(range_date)))
 
print(df.head(10))


Python3
import pandas as pd
from datetime import datetime
import numpy as np
 
range_date = pd.date_range(start ='1/1/2019', end ='1/08/2019',
                                                  freq ='Min')
 
df = pd.DataFrame(range_date, columns =['date'])
df['data'] = np.random.randint(0, 100, size =(len(range_date)))
 
string_data = [str(x) for x in range_date]
print(string_data[1:11])


Python3
import pandas as pd
from datetime import datetime
import numpy as np
 
range_data = pd.date_range(start ='1/1/2019', end ='1/08/2019',
                                                  freq ='Min')
 
df = pd.DataFrame(range_data, columns =['date'])
df['data'] = np.random.randint(0, 100, size =(len(range_data)))
 
df['datetime'] = pd.to_datetime(df['date'])
df = df.set_index('datetime')
df.drop(['date'], axis = 1, inplace = True)
 
print(df['2019-01-05'][1:11])


输出:
DatetimeIndex(['2019-01-01 00:00:00', '2019-01-01 00:01:00',
               '2019-01-01 00:02:00', '2019-01-01 00:03:00',
               '2019-01-01 00:04:00', '2019-01-01 00:05:00',
               '2019-01-01 00:06:00', '2019-01-01 00:07:00',
               '2019-01-01 00:08:00', '2019-01-01 00:09:00',
               ...
               '2019-01-07 23:51:00', '2019-01-07 23:52:00',
               '2019-01-07 23:53:00', '2019-01-07 23:54:00',
               '2019-01-07 23:55:00', '2019-01-07 23:56:00',
               '2019-01-07 23:57:00', '2019-01-07 23:58:00',
               '2019-01-07 23:59:00', '2019-01-08 00:00:00'],
              dtype='datetime64[ns]', length=10081, freq='T')

解释:
在此代码中,我们基于分钟为日期范围创建了时间戳,日期范围为1/1/2019 – 8/1/2019 。我们可以将频率改变几小时到几分钟或几秒钟。此函数将帮助您跟踪每分钟存储的数据记录。正如我们在输出中看到的,日期时间戳的长度为 10081。请记住,熊猫使用数据类型为datetime64[ns]
代码#2:

Python3

import pandas as pd
from datetime import datetime
import numpy as np
 
range_date = pd.date_range(start ='1/1/2019', end ='1/08/2019',
                                                   freq ='Min')
print(type(range_date[110]))
输出:

解释:
我们正在检查名为range_date的对象的类型。
代码#3:

Python3

import pandas as pd
from datetime import datetime
import numpy as np
 
range_date = pd.date_range(start ='1/1/2019', end ='1/08/2019',
                                                   freq ='Min')
 
df = pd.DataFrame(range_date, columns =['date'])
df['data'] = np.random.randint(0, 100, size =(len(range_date)))
 
print(df.head(10))
输出:
date  data
0 2019-01-01 00:00:00    49
1 2019-01-01 00:01:00    58
2 2019-01-01 00:02:00    48
3 2019-01-01 00:03:00    96
4 2019-01-01 00:04:00    42
5 2019-01-01 00:05:00     8
6 2019-01-01 00:06:00    20
7 2019-01-01 00:07:00    96
8 2019-01-01 00:08:00    48
9 2019-01-01 00:09:00    78

解释:
我们首先创建了一个时间序列,然后将这些数据转换为数据帧,并使用随机函数生成随机数据并映射到数据帧。然后检查结果我们使用打印函数。
为了进行时间序列操作,我们需要一个日期时间索引,以便数据帧在时间戳上被索引。在这里,我们在 pandas 数据框中添加了一个新列。
代码 #4:

Python3

import pandas as pd
from datetime import datetime
import numpy as np
 
range_date = pd.date_range(start ='1/1/2019', end ='1/08/2019',
                                                  freq ='Min')
 
df = pd.DataFrame(range_date, columns =['date'])
df['data'] = np.random.randint(0, 100, size =(len(range_date)))
 
string_data = [str(x) for x in range_date]
print(string_data[1:11])
输出:
['2019-01-01 00:01:00', '2019-01-01 00:02:00', '2019-01-01 00:03:00', '2019-01-01 00:04: 00'、'2019-01-01 00:05:00'、'2019-01-01 00:06:00'、'2019-01-01 00:07:00'、'2019-01-01 00: 08:00'、'2019-01-01 00:09:00'、'2019-01-01 00:10:00']

解释:
此代码仅使用data_rng的元素并转换为字符串,由于数据很多,我们对数据进行切片并打印前十个值列表string_data 。通过在列表中使用 for each 循环,我们得到了range_date系列中的所有值。当我们使用 date_range 时,我们总是必须指定开始和结束日期。
例子:

Python3

import pandas as pd
from datetime import datetime
import numpy as np
 
range_data = pd.date_range(start ='1/1/2019', end ='1/08/2019',
                                                  freq ='Min')
 
df = pd.DataFrame(range_data, columns =['date'])
df['data'] = np.random.randint(0, 100, size =(len(range_data)))
 
df['datetime'] = pd.to_datetime(df['date'])
df = df.set_index('datetime')
df.drop(['date'], axis = 1, inplace = True)
 
print(df['2019-01-05'][1:11])
输出:
data
datetime                 
2019-01-05 00:01:00    99
2019-01-05 00:02:00    21
2019-01-05 00:03:00    29
2019-01-05 00:04:00    98
2019-01-05 00:05:00     0
2019-01-05 00:06:00    72
2019-01-05 00:07:00    69
2019-01-05 00:08:00    53
2019-01-05 00:09:00     3
2019-01-05 00:10:00    37