{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 11.5 Periods and Period Arithmetic(周期和周期运算)\n",
"\n",
"Periods(周期)表示时间跨度(timespans),比如天,月,季,年。Period类表示的就是这种数据类型,构建的时候需要用字符串或整数,以及一个频度(关于频度的代码可以看11.4中的表格):"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2007', 'A-DEC')"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = pd.Period(2007, freq='A-DEC')\n",
"p"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在这个李自力,Period对象代表了整个2007年一年的时间跨度,从1月1日到12月31日。在Period对象上进行加减,会有和对频度进行位移(shifting)一样的效果:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2012', 'A-DEC')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p + 5"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2005', 'A-DEC')"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p - 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果两个周期有相同的频度,二者的区别就是它们之间有多少个单元(units):"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"7"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.Period('2014', freq='A-DEC') - p"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"固定范围的周期(Regular ranges of periods)可以通过period_range函数创建:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PeriodIndex(['2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06'], dtype='int64', freq='M')"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rng = pd.period_range('2000-01-01', '2000-06-03', freq='M')\n",
"rng"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"PeriodIndex类能存储周期组成的序列,而且可以作为任何pandas数据结构中的轴索引(axis index):"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2000-01 0.439035\n",
"2000-02 -0.231125\n",
"2000-03 -1.085106\n",
"2000-04 -1.909902\n",
"2000-05 1.478810\n",
"2000-06 0.656713\n",
"Freq: M, dtype: float64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.Series(np.random.randn(6), index=rng)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果我们有字符串组成的数组,可以使用PeriodIndex类:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"values = ['2001Q3', '2002Q2', '2003Q1']"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PeriodIndex(['2001Q3', '2002Q2', '2003Q1'], dtype='int64', freq='Q-DEC')"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"index = pd.PeriodIndex(values, freq='Q-DEC')\n",
"index"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 1 Period Frequency Conversion(周期频度转换)\n",
"\n",
"通过使用asfreq方法,Periods和PeriodIndex对象能被转换为其他频度。例如,假设我们有一个年度期间(annual period),并且想要转换为月度期间(monthly period),做法非常直观:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2007', 'A-DEC')"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = pd.Period('2007', freq='A-DEC')\n",
"p"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2007-01', 'M')"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p.asfreq('M', how='start')"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2007-12', 'M')"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p.asfreq('M', how='end')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们可以认为`Period('2007', freq='A-DEC')`是某种指向时间跨度的光标,而这个时间跨度被细分为月度期间。可以看下面的图示:\n",
"\n",
"\n",
"\n",
"如果一个财政年度(fiscal year)是在1月结束,而不是12月,那么对应的月度期间会不一样:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2007', 'A-JUN')"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = pd.Period('2007', freq='A-JUN')\n",
"p"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2006-07', 'M')"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p.asfreq('M', 'start')"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2007-06', 'M')"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p.asfreq('M', 'end')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当我们转换高频度为低频度时,pandas会根据 subperiod(次周期;子周期)的归属来决定superperiod(超周期;母周期)。例如,在A-JUN频度中,月份Aug-2007其实是个2008周期的一部分:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"p = pd.Period('Aug-2007', 'M')"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2008', 'A-JUN')"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p.asfreq('A-JUN')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"整个PeriodIndex对象或时间序列可以被转换为一样的语义(semantics):"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rng = pd.period_range('2006', '2009', freq='A-DEC')"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2006 0.391629\n",
"2007 0.497413\n",
"2008 -1.685639\n",
"2009 0.939885\n",
"Freq: A-DEC, dtype: float64"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts = pd.Series(np.random.randn(len(rng)), index=rng)\n",
"ts"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2006-01 0.391629\n",
"2007-01 0.497413\n",
"2008-01 -1.685639\n",
"2009-01 0.939885\n",
"Freq: M, dtype: float64"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts.asfreq('M', how='start')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里,年度周期可以用月度周期替换,对应的第一个月也会包含在每个年度周期里。如果我们想要每年的最后一个工作日的话,可以使用'B'频度,并指明我们想要周期的结尾:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2006-12-29 0.391629\n",
"2007-12-31 0.497413\n",
"2008-12-31 -1.685639\n",
"2009-12-31 0.939885\n",
"Freq: B, dtype: float64"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts.asfreq('B', how='end')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 2 Quarterly Period Frequencies(季度周期频度)\n",
"\n",
"季度数据经常出现在会计,经济等领域。大部分季度数据都与财政年度结束日(fiscal year end)相关,比如12月最后一个工作日。因此,根据财政年度结束的不同,周期2012Q4也有不同的意义。pandas支持所有12个周期频度,从Q-JAN到Q-DEC:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2012Q4', 'Q-JAN')"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = pd.Period('2012Q4', freq='Q-JAN')\n",
"p"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果是财政年度结束日在一月份,那么2012Q4代表从11月到1月,可以用日频度查看。可以看下面的图示帮助理解:\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2011-11-01', 'D')"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p.asfreq('D', 'start')"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2012-01-31', 'D')"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p.asfreq('D', 'end')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"因此,做些简单的周期运算也是可能的,例如,获得每个季度的,第二个到最后一个工作日的,下午4点的时间戳:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Period('2012-01-30 16:00', 'T')"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p4pm = (p.asfreq('B', 'e') - 1).asfreq('T', 's') + 16 * 60\n",
"p4pm"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Timestamp('2012-01-30 16:00:00')"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p4pm.to_timestamp()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以用period_range产生季度范围数据。运算方法也一样:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rng = pd.period_range('2011Q3', '2012Q4', freq='Q-JAN')"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2011Q3 0\n",
"2011Q4 1\n",
"2012Q1 2\n",
"2012Q2 3\n",
"2012Q3 4\n",
"2012Q4 5\n",
"Freq: Q-JAN, dtype: int64"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts = pd.Series(np.arange(len(rng)), index=rng)\n",
"ts"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"new_rng = (rng.asfreq('B', 'e') - 1).asfreq('T', 's') + 16 * 60"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2010-10-28 16:00:00 0\n",
"2011-01-28 16:00:00 1\n",
"2011-04-28 16:00:00 2\n",
"2011-07-28 16:00:00 3\n",
"2011-10-28 16:00:00 4\n",
"2012-01-30 16:00:00 5\n",
"dtype: int64"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts.index = new_rng.to_timestamp()\n",
"ts"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3 Converting Timestamps to Periods (and Back)(时间戳与周期相互转换)\n",
"\n",
"用时间戳作为索引的Series和DataFrame对象,可以用to_period方法转变为周期:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rng = pd.date_range('2000-01-01', periods=3, freq='M')"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2000-01-31 1.556049\n",
"2000-02-29 -0.708661\n",
"2000-03-31 -0.154767\n",
"Freq: M, dtype: float64"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts = pd.Series(np.random.randn(3), index=rng)\n",
"ts"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2000-01 1.556049\n",
"2000-02 -0.708661\n",
"2000-03 -0.154767\n",
"Freq: M, dtype: float64"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pts = ts.to_period()\n",
"pts"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"因为周期是不重复的时间跨度(non-overlapping timespans),一个时间戳只能属于一个有指定频度的单独周期。尽管默认情况下新的PeriodIndex的频度会从时间戳中来推测,但我们也可以自己设定想要的频度。结果中有重复的周期也没有关系:"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"DatetimeIndex(['2000-01-29', '2000-01-30', '2000-01-31', '2000-02-01',\n",
" '2000-02-02', '2000-02-03'],\n",
" dtype='datetime64[ns]', freq='D')"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rng = pd.date_range('1/29/2000', periods=6, freq='D')\n",
"rng"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2000-01-29 1.115254\n",
"2000-01-30 -1.813124\n",
"2000-01-31 0.970670\n",
"2000-02-01 1.306337\n",
"2000-02-02 0.673274\n",
"2000-02-03 -0.105436\n",
"Freq: D, dtype: float64"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts2 = pd.Series(np.random.randn(6), index=rng)\n",
"ts2"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2000-01 1.115254\n",
"2000-01 -1.813124\n",
"2000-01 0.970670\n",
"2000-02 1.306337\n",
"2000-02 0.673274\n",
"2000-02 -0.105436\n",
"Freq: M, dtype: float64"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts2.to_period('M')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"想转换回时间戳的话,使用to_timestamp:"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2000-01-29 1.115254\n",
"2000-01-30 -1.813124\n",
"2000-01-31 0.970670\n",
"2000-02-01 1.306337\n",
"2000-02-02 0.673274\n",
"2000-02-03 -0.105436\n",
"Freq: D, dtype: float64"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pts = ts2.to_period()\n",
"pts"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2000-01-29 1.115254\n",
"2000-01-30 -1.813124\n",
"2000-01-31 0.970670\n",
"2000-02-01 1.306337\n",
"2000-02-02 0.673274\n",
"2000-02-03 -0.105436\n",
"Freq: D, dtype: float64"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pts.to_timestamp(how='end')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 4 Creating a PeriodIndex from Arrays(从数组中创建一个周期索引)\n",
"\n",
"有固定频度的数据集,有时会在很多列上存储时间跨度信息。例如,在下面的宏观经济数据及上,年度和季度在不同的列:"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"
\n",
" \n",
" \n",
" | \n",
" year | \n",
" quarter | \n",
" realgdp | \n",
" realcons | \n",
" realinv | \n",
" realgovt | \n",
" realdpi | \n",
" cpi | \n",
" m1 | \n",
" tbilrate | \n",
" unemp | \n",
" pop | \n",
" infl | \n",
" realint | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 1959.0 | \n",
" 1.0 | \n",
" 2710.349 | \n",
" 1707.4 | \n",
" 286.898 | \n",
" 470.045 | \n",
" 1886.9 | \n",
" 28.98 | \n",
" 139.7 | \n",
" 2.82 | \n",
" 5.8 | \n",
" 177.146 | \n",
" 0.00 | \n",
" 0.00 | \n",
"
\n",
" \n",
" | 1 | \n",
" 1959.0 | \n",
" 2.0 | \n",
" 2778.801 | \n",
" 1733.7 | \n",
" 310.859 | \n",
" 481.301 | \n",
" 1919.7 | \n",
" 29.15 | \n",
" 141.7 | \n",
" 3.08 | \n",
" 5.1 | \n",
" 177.830 | \n",
" 2.34 | \n",
" 0.74 | \n",
"
\n",
" \n",
" | 2 | \n",
" 1959.0 | \n",
" 3.0 | \n",
" 2775.488 | \n",
" 1751.8 | \n",
" 289.226 | \n",
" 491.260 | \n",
" 1916.4 | \n",
" 29.35 | \n",
" 140.5 | \n",
" 3.82 | \n",
" 5.3 | \n",
" 178.657 | \n",
" 2.74 | \n",
" 1.09 | \n",
"
\n",
" \n",
" | 3 | \n",
" 1959.0 | \n",
" 4.0 | \n",
" 2785.204 | \n",
" 1753.7 | \n",
" 299.356 | \n",
" 484.052 | \n",
" 1931.3 | \n",
" 29.37 | \n",
" 140.0 | \n",
" 4.33 | \n",
" 5.6 | \n",
" 179.386 | \n",
" 0.27 | \n",
" 4.06 | \n",
"
\n",
" \n",
" | 4 | \n",
" 1960.0 | \n",
" 1.0 | \n",
" 2847.699 | \n",
" 1770.5 | \n",
" 331.722 | \n",
" 462.199 | \n",
" 1955.5 | \n",
" 29.54 | \n",
" 139.6 | \n",
" 3.50 | \n",
" 5.2 | \n",
" 180.007 | \n",
" 2.31 | \n",
" 1.19 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" year quarter realgdp realcons realinv realgovt realdpi cpi \\\n",
"0 1959.0 1.0 2710.349 1707.4 286.898 470.045 1886.9 28.98 \n",
"1 1959.0 2.0 2778.801 1733.7 310.859 481.301 1919.7 29.15 \n",
"2 1959.0 3.0 2775.488 1751.8 289.226 491.260 1916.4 29.35 \n",
"3 1959.0 4.0 2785.204 1753.7 299.356 484.052 1931.3 29.37 \n",
"4 1960.0 1.0 2847.699 1770.5 331.722 462.199 1955.5 29.54 \n",
"\n",
" m1 tbilrate unemp pop infl realint \n",
"0 139.7 2.82 5.8 177.146 0.00 0.00 \n",
"1 141.7 3.08 5.1 177.830 2.34 0.74 \n",
"2 140.5 3.82 5.3 178.657 2.74 1.09 \n",
"3 140.0 4.33 5.6 179.386 0.27 4.06 \n",
"4 139.6 3.50 5.2 180.007 2.31 1.19 "
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = pd.read_csv('../examples/macrodata.csv')\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1959Q1 1959.0\n",
"1959Q2 1959.0\n",
"1959Q3 1959.0\n",
"1959Q4 1959.0\n",
"1960Q1 1960.0\n",
"Freq: Q-DEC, Name: year, dtype: float64"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.year[:5]"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1959Q1 1.0\n",
"1959Q2 2.0\n",
"1959Q3 3.0\n",
"1959Q4 4.0\n",
"1960Q1 1.0\n",
"Freq: Q-DEC, Name: quarter, dtype: float64"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.quarter[:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"通过把这些数组传递给PeriodIndex,并指定频度,我们可以把这些合并得到一个新的DataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PeriodIndex(['1959Q1', '1959Q2', '1959Q3', '1959Q4', '1960Q1', '1960Q2',\n",
" '1960Q3', '1960Q4', '1961Q1', '1961Q2',\n",
" ...\n",
" '2007Q2', '2007Q3', '2007Q4', '2008Q1', '2008Q2', '2008Q3',\n",
" '2008Q4', '2009Q1', '2009Q2', '2009Q3'],\n",
" dtype='int64', length=203, freq='Q-DEC')"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"index = pd.PeriodIndex(year=data.year, quarter=data.quarter, \n",
" freq='Q-DEC')\n",
"index"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data.index = index"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" year | \n",
" quarter | \n",
" realgdp | \n",
" realcons | \n",
" realinv | \n",
" realgovt | \n",
" realdpi | \n",
" cpi | \n",
" m1 | \n",
" tbilrate | \n",
" unemp | \n",
" pop | \n",
" infl | \n",
" realint | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1959Q1 | \n",
" 1959.0 | \n",
" 1.0 | \n",
" 2710.349 | \n",
" 1707.4 | \n",
" 286.898 | \n",
" 470.045 | \n",
" 1886.9 | \n",
" 28.98 | \n",
" 139.7 | \n",
" 2.82 | \n",
" 5.8 | \n",
" 177.146 | \n",
" 0.00 | \n",
" 0.00 | \n",
"
\n",
" \n",
" | 1959Q2 | \n",
" 1959.0 | \n",
" 2.0 | \n",
" 2778.801 | \n",
" 1733.7 | \n",
" 310.859 | \n",
" 481.301 | \n",
" 1919.7 | \n",
" 29.15 | \n",
" 141.7 | \n",
" 3.08 | \n",
" 5.1 | \n",
" 177.830 | \n",
" 2.34 | \n",
" 0.74 | \n",
"
\n",
" \n",
" | 1959Q3 | \n",
" 1959.0 | \n",
" 3.0 | \n",
" 2775.488 | \n",
" 1751.8 | \n",
" 289.226 | \n",
" 491.260 | \n",
" 1916.4 | \n",
" 29.35 | \n",
" 140.5 | \n",
" 3.82 | \n",
" 5.3 | \n",
" 178.657 | \n",
" 2.74 | \n",
" 1.09 | \n",
"
\n",
" \n",
" | 1959Q4 | \n",
" 1959.0 | \n",
" 4.0 | \n",
" 2785.204 | \n",
" 1753.7 | \n",
" 299.356 | \n",
" 484.052 | \n",
" 1931.3 | \n",
" 29.37 | \n",
" 140.0 | \n",
" 4.33 | \n",
" 5.6 | \n",
" 179.386 | \n",
" 0.27 | \n",
" 4.06 | \n",
"
\n",
" \n",
" | 1960Q1 | \n",
" 1960.0 | \n",
" 1.0 | \n",
" 2847.699 | \n",
" 1770.5 | \n",
" 331.722 | \n",
" 462.199 | \n",
" 1955.5 | \n",
" 29.54 | \n",
" 139.6 | \n",
" 3.50 | \n",
" 5.2 | \n",
" 180.007 | \n",
" 2.31 | \n",
" 1.19 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" year quarter realgdp realcons realinv realgovt realdpi \\\n",
"1959Q1 1959.0 1.0 2710.349 1707.4 286.898 470.045 1886.9 \n",
"1959Q2 1959.0 2.0 2778.801 1733.7 310.859 481.301 1919.7 \n",
"1959Q3 1959.0 3.0 2775.488 1751.8 289.226 491.260 1916.4 \n",
"1959Q4 1959.0 4.0 2785.204 1753.7 299.356 484.052 1931.3 \n",
"1960Q1 1960.0 1.0 2847.699 1770.5 331.722 462.199 1955.5 \n",
"\n",
" cpi m1 tbilrate unemp pop infl realint \n",
"1959Q1 28.98 139.7 2.82 5.8 177.146 0.00 0.00 \n",
"1959Q2 29.15 141.7 3.08 5.1 177.830 2.34 0.74 \n",
"1959Q3 29.35 140.5 3.82 5.3 178.657 2.74 1.09 \n",
"1959Q4 29.37 140.0 4.33 5.6 179.386 0.27 4.06 \n",
"1960Q1 29.54 139.6 3.50 5.2 180.007 2.31 1.19 "
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1959Q1 0.00\n",
"1959Q2 2.34\n",
"1959Q3 2.74\n",
"1959Q4 0.27\n",
"1960Q1 2.31\n",
"Freq: Q-DEC, Name: infl, dtype: float64"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.infl[:5]"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [py35]",
"language": "python",
"name": "Python [py35]"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}