Pandas必备技能之“时间序列数据处理”大数据应用

来源:互联网 / 作者:SKY / 2019-06-12 20:07 / 点击:
时间序列数据作为时间序列分析的基础,学会如何对它进行巧妙地处理是非常必要的,Python中的Pandas库为我们提供了强大的时间序列数据处理的方法,本文会介绍其中

01、时间格式转换

有时候,我们获得的原始数据并不是按照时间类型索引进行排列的,需要先进行时间格式的转换,为后续的操作和分析做准备。

这里介绍两种方法。第一种方法是用pandas.read_csv导入文件的时候,通过设置参数parse_dates和index_col,直接对日期列进行转换,并将其设置为索引。关于参数的详细解释,请查看文档【1】。

如下示例中,在没有设置参数之前,可以观察到数据集中的索引是数字0-208,'date'列的数据类型也不是日期。

In [8]: data = pd.read_csv('unemployment.csv'

In [9]: data.info() 

<class 'pandas.core.frame.DataFrame'

RangeIndex: 209 entries, 0 to 208 

Data columns (total 2 columns): 

date      209 non-null object 

UNRATE    209 non-null float64 

dtypes: float64(1), object(1) 

memory usage: 3.3+ KB 

设置参数parse_dates = ['date'] ,将数据类型转换成日期,再设置 index_col = 'date',将这一列用作索引,结果如下。

In [11]: data = pd.read_csv('unemployment.csv', parse_dates=['date'], index_col='date'

 

In [12]: data.info() 

<class 'pandas.core.frame.DataFrame'

DatetimeIndex: 209 entries, 2000-01-01 to 2017-05-01 

Data columns (total 1 columns): 

UNRATE    209 non-null float64 

dtypes: float64(1) 

memory usage: 13.3 KB 

这时,索引变成了日期'20000101'-'2017-05-01',数据类型是datetime。

第二种方法是在已经导入数据的情况下,用pd.to_datetime()【2】将列转换成日期类型,再用 df.set_index()【3】将其设置为索引,完成转换。

以tushare.pro上面的日线行情数据为例,我们把'trade_date'列转换成日期类型,并设置成索引。

import tushare as ts 

import pandas as pd 

 

pd.set_option('expand_frame_repr'False)  # 列太多时不换行 

pro = ts.pro_api() 

 

df = pro.daily(ts_code='000001.SZ', start_date='20180701', end_date='20180718'

 

df.info() 

 

<class 'pandas.core.frame.DataFrame'

RangeIndex: 13 entries, 0 to 12 

Data columns (total 11 columns): 

ts_code       13 non-null object 

trade_date    13 non-null object 

open          13 non-null float64 

high          13 non-null float64 

low           13 non-null float64 

close         13 non-null float64 

pre_close     13 non-null float64 

change        13 non-null float64 

pct_chg       13 non-null float64 

vol           13 non-null float64 

amount        13 non-null float64 

dtypes: float64(9), object(2) 

memory usage: 1.2+ KB 

None 

 

 

df['trade_date'] = pd.to_datetime(df['trade_date']) 

df.set_index('trade_date', inplace=True

df.sort_values('trade_date', ascending=True, inplace=True)  # 升序排列 

 

df.info() 

 

<class 'pandas.core.frame.DataFrame'

DatetimeIndex: 13 entries, 2018-07-02 to 2018-07-18 

Data columns (total 10 columns): 

ts_code      13 non-null object 

open         13 non-null float64 

high         13 non-null float64 

low          13 non-null float64 

close        13 non-null float64 

pre_close    13 non-null float64 

change       13 non-null float64 

pct_chg      13 non-null float64 

vol          13 non-null float64 

amount       13 non-null float64 

dtypes: float64(9), object(1) 

memory usage: 1.1+ KB 

打印出前5行,效果如下。

df.head() 

Out[15]:  

阅读延展

1
3