python数据分析时间序列如何提取一个月的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python数据分析时间序列如何提取一个月的数据相关的知识,希望对你有一定的参考价值。

python做数据分析时下面就是提取一个月数据的教程1. datetime库

1.1 ​​datetime.date​​
1) ​​datetime.date.today()​​ 返回今日,输出的类型为date类

import datetime
today = datetime.date.today()
print(today)
print(type(today))
–> 输出的结果为:

2020-03-04
<class 'datetime.date'>
将输出的结果转化为常见数据类型(字符串)

print(str(today))
print(type(str(today)))
date = str(today).split('-')
year,month,day = date[0],date[1],date[2]
print('今日的年份是年,月份是月,日子是号'.format(year,month,day))
–> 输出的结果为:(转化为字符串之后就可以直接进行操作)

2020-03-04
<class 'str'>
今日的年份是2020年,月份是03月,日子是04号
2) ​​datetime.date(年,月,日)​​,获取当前的日期

date = datetime.date(2020,2,29)
print(date)
print(type(date))
–> 输出的结果为:

2020-02-29
<class 'datetime.date'>
1.2 ​​datetime.datetime​​
1) ​​datetime.datetime.now()​​输出当前时间,datetime类

now = datetime.datetime.now()
print(now)
print(type(now))
–> 输出的结果为:(注意秒后面有个不确定尾数)

2020-03-04 09:02:28.280783
<class 'datetime.datetime'>
可通过​​str()​​转化为字符串(和上面类似)

print(str(now))
print(type(str(now)))
–> 输出的结果为:(这里也可以跟上面的处理类似分别获得相应的数据,但是也可以使用下面更直接的方法来获取)

2020-03-04 09:04:32.271075
<class 'str'>
2) 通过自带的方法获取年月日,时分秒(这里返回的是​​int​​整型数据,注意区别)

now = datetime.datetime.now()
print(now.year,type(now.year))
print(now.month,type(now.month))
print(now.day,type(now.day))
print(now.hour,type(now.hour))
print(now.minute,type(now.minute))
print(now.second,type(now.second))
print(now.date(),type(now.date()))
print(now.date().year,type(now.date().year))
–> 输出的结果为:(首先注意输出中倒数第二个还是上面的​​datetime.date​​​对象,这里是用来做时间对比的,同时除了这里的​​datetime.datetime​​​有这种方法,​​datetime.date​​​对象也有。因为此方法获取​​second​​是取的整型数据,自然最后的不确定尾数就被取整处理掉了)

2020 <class 'int'>
3 <class 'int'>
4 <class 'int'>
9 <class 'int'>
12 <class 'int'>
55 <class 'int'>
2020-03-04 <class 'datetime.date'>
2020 <class 'int'>
参考技术A Pandas中,最基本的时间序列类型就是以时间戳为索引的Series对象。

时间戳使用Timestamp(Series派生的子类)对象表示,该对象与datetime具有高度的兼容性,可以直接通过to_datetime()函数将datetime转换为TimeStamp对象。

import pandas as pd # 导入pandas模块,并起个别名pd from datetime import datetime import numpy as np pd.to_datetime('20200828') # 将datetime转换为Timestamp对象
Timestamp('2020-08-28 00:00:00')
当传入的是多个datetime组成的列表,则Pandas会将其强制转换为DatetimeIndex类对象。

# 传入多个datetime字符串 date_index = pd.to_datetime(['20200820', '20200828', '20200908']) date_index
DatetimeIndex(['2020-08-20', '2020-08-28', '2020-09-08'],
dtype='datetime64[ns]', freq=None)
如何取出第一个时间戳

date_index[0] # 取出第一个时间戳
Timestamp('2020-08-20 00:00:00')
2.在Pandas中,最基本的时间序列类型就是以时间戳为索引的Series对象。

# 创建时间序列类型的Series对象 date_ser = pd.Series([11, 22, 33], index=date_index) date_ser
2020-08-20 11
2020-08-28 22
2020-09-08 33
dtype: int64
也可将包含多个datetime对象的列表传给index参数,同样能创建具有时间戳索引的Series对象。

# 指定索引为多个datetime的列表 date_list = [datetime(2020, 1, 1), datetime(2020, 1, 15), datetime(2020, 2, 20), datetime(2020, 4, 1), datetime(2020,
参考技术B 做数据分析时,对于有时间数据的数据来源,在时间维度上的剖析必不可少

比如:

在一天的销售时间内,哪些时间段是高峰

是否与星期有关

RFM模型中的R怎么快速计算距离天数

如何找出某个时间点或时间段的数据

以某订单数据为例

查看时间列,包括日期和时间,从19年到20年,共约4万条数据,

注意类型是datetime

如果类型不是

datetime,则后续无法处理时间数据!

如下新建一列类型不是datetime的时间数据,在提取年份时会出错

如果时间数据不是默认类型时,需要进行类型转换

提取年月日、时分秒、第几周,闰年等

提取星期,其中0表示周一
参考技术C Python数据分析时间序列按照日期先后顺序,依次提取一个月的数据就行了。这样就会得到完整的数据结果和分析。 参考技术D python数据分析(15)】Pandas中时间序列处理(1)datetime中年月日数据的提取、时间数据运算以及日期字符串格式标准化转换

如何在 Python 中改进此循环以提高速度

【中文标题】如何在 Python 中改进此循环以提高速度【英文标题】:How can I improve this loop in Python to increase speed 【发布时间】:2019-01-28 13:46:35 【问题描述】:

我正在从 Police.uk 的 API 中以 JSON 文件的形式读取数据,然后遍历该文件以将数据传递到 pandas 数据框。

我用来从 JSON 中提取并放入 DataFrame 的循环运行非常缓慢。

police API 只允许您一次下载一个月的数据。因此,我使用了日期列表和循环来下载超过一个月的数据。

代码如下。 有什么方法可以改进这个循环,让它运行得更快?我想从 API 下载更多数据。

import pandas as pd
import numpy as np
import requests
import json
import matplotlib.pyplot as plt
import datetime

%matplotlib inline
plt.rcParams['figure.figsize'] = (10, 5)

#Create list of periods to download data for
periods = ['2017-03', '2017-04', '2017-05', '2017-06']

#Create empty list to store retrieved JSON data
data = []

警察 API 网址

url = 'https://data.police.uk/api/crimes-street/all-crime'

循环下载数据并追加列表

for date in periods:
    parameters = 'poly': '51.6,0.06:51.6,0.2:51.5,0.2:51.5,0.062', 'date': date
    #Query API for data
    response = requests.get(url, params=parameters)
    data += json.loads(response.content)
    print(len(data))

创建空数据框

df = pd.DataFrame()

==============================================

---这是运行很慢的部分-----

从 JSON 文件中提取相关部分到 Dataframe 中

for i in range(len(data)):
    df.loc[i, 'id'] = data[i]['id']
    df.loc[i, 'category'] = data[i]['category']
    df.loc[i, 'month'] = data[i]['month']
    df.loc[i, 'latitude'] = data[i]['location']['latitude']
    df.loc[i, 'longitude'] = data[i]['location']['longitude']

===============================================

【问题讨论】:

可以添加示例数据吗?可以使用data = ['id': 1, 'category': 2, 'month': 1, 'location': 'latitude': 100, 'longitude': 200, 'id': 2, 'category': 3, 'month': 2, 'location': 'latitude': 500, 'longitude': 100]还是有不同的? 【参考方案1】:

json_normalizerename 列一起使用:

from pandas.io.json import json_normalize

data = ['id': 1, 'category': 2, 'month': 1, 'location': 'latitude': 100, 'longitude': 200,
        'id': 2, 'category': 3, 'month': 2, 'location': 'latitude': 500, 'longitude': 100]

df = json_normalize(data)
df = df.rename(columns='location.latitude':'latitude','location.longitude':'longitude')
print (df)
   category  id  latitude  longitude  month
0         2   1       100        200      1
1         3   2       500        100      2

【讨论】:

谢谢你,简单有效!

以上是关于python数据分析时间序列如何提取一个月的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 python 从 mysql 数据库中获取数据时提取整数值

前几个月的 SQL 固定日期

如何从 python 中的字段中提取特定数据以打印它?

从多季度期间提取季度数据

如何使用 datetime Python 模块计算距当前日期六个月的日期?

最近旅行的乘客