第7章 数据规整化:清理、转换、合并、重塑(4)
来源:互联网 发布:正在优化social club 编辑:程序博客网 时间:2024/05/21 10:17
第7章 数据规整化:清理、转换、合并、重塑(4)
本章并未给出ldata的来源,可用macrodata.csv转出可用数据。
import pandas as pdimport numpy as npimport datetime ###后面用到时间处理from pandas import Series,DataFrame###读入macrodata.csv文件data1 = pd.read_csv('E:\pydata-book-2nd-edition\pydata-book-2nd-edition\examples\macrodata.csv') #####选择有用列,其中quarter表示季度,用于合成日期data2 = DataFrame(data1,columns=['year','quarter','realgdp','infl','unemp'])####将季度转为日期,对应关系为:1 = 3.31,2 = 6.30,3 = 9.30,4 = 12.31for i in range(len(data2.index)): if data2.ix[i,'quarter'] == 1: ####选择DataFrame数据中i行'quarter'列的元素,注意ix[]方括号 data2.ix[i,'date'] = datetime.datetime(int(data2.ix[i,'year']),3,31) #设置i行新增列'date'的值,时间格式用datetime.datetime(year,month,day)设置, elif data2.ix[i,'quarter'] == 2: data2.ix[i,'date'] = datetime.datetime(int(data2.ix[i,'year']),6,30) elif data2.ix[i,'quarter'] == 3: data2.ix[i,'date'] = datetime.datetime(int(data2.ix[i,'year']),9,30) elif data2.ix[i,'quarter'] == 4: data2.ix[i,'date'] = datetime.datetime(int(data2.ix[i,'year']),12,31)####删除列year、quarter,注意设置axis=1,删除列,默认axis=0,删除行data3 = data2.drop(['year','quarter'],axis=1)####将date列设为索引,书中格式为date独自一列,realgdp/infl/unemp合并一列,所以需要先将独自一列的date设置为索引,避免下一步旋转时,date也被合并进去data4 = data3.set_index('date')###列转为行,形成层次化索引,并为最内侧data5 = data4.stack()###先储存再读取,将索引化为列data5.to_csv('E:\pycode\data\P202.csv')###注意默认读取csv时会将第一行设置为列名,header = None设置没有列名,再用names参数指定列名ldata = pd.read_csv('E:\pycode\data\P202.csv',header = None,names=['date','item','value'])#In [103]:ldata[:10]#Out[103]: # date item value#0 1959-03-31 realgdp 2710.349#1 1959-03-31 infl 0.000#2 1959-03-31 unemp 5.800#3 1959-06-30 realgdp 2778.801#4 1959-06-30 infl 2.340#5 1959-06-30 unemp 5.100#6 1959-09-30 realgdp 2775.488#7 1959-09-30 infl 2.740#8 1959-09-30 unemp 5.300#9 1959-12-31 realgdp 2785.204
长格式旋转为宽格式
时间序列数据通常是以“长格式”或“堆叠格式”存储在数据库中。例如 In [103]:ldata[:10]
这里的长格式即指,相同的date时有4种不同的属性值都列在item内,主键有date和item共同构成,转为宽格式,即把item内的4个属性展开。不同的item值形成一列,date列中的值可以直接做为索引。DataFrame中的pivot方法可以完成转换。
pivoted = ldata.pivot('date','item','value')####第一个参数为ldata中用作行索引的列名,第二个参数为ldata中用作列索引的列名,第三个参数为ldata中用来填充pivoted数据列的列名pivoted.head()###DataFrame.head(n = 5)返回前n行,默认n = 5Out[106]: item infl realgdp unempdate 1959-03-31 0.00 2710.349 5.81959-06-30 2.34 2778.801 5.11959-09-30 2.74 2775.488 5.31959-12-31 0.27 2785.204 5.61960-03-31 2.31 2847.699 5.2
上述中只有一个参与重塑的数据列,value,假设有两个参与重塑的数据列,value和value2。
ldata['value2'] = np.random.randn(len(ldata))##新增列value2,并用随机数填充###忽略第三个参数可以得到层次化的列,即包含value和value1的值pivoted = ldata.pivot('date','item')pivoted.head()Out[111]: value value2 item infl realgdp unemp infl realgdp unempdate 1959-03-31 0.00 2710.349 5.8 0.292680 -0.699746 0.6685321959-06-30 2.34 2778.801 5.1 -0.457626 -1.274159 -0.1977951959-09-30 2.74 2775.488 5.3 -2.181216 -0.860393 0.1427421959-12-31 0.27 2785.204 5.6 1.532613 -1.294194 0.1276071960-03-31 2.31 2847.699 5.2 -1.383715 0.558345 -0.132973####如果指定,只能得到用其中一种值填充的结果#######且第三个参数只能接受一维的数据,不能同时传入value和value2pivoted = ldata.pivot('date','item','value2')pivoted.head()Out[115]: item infl realgdp unempdate 1959-03-31 0.292680 -0.699746 0.6685321959-06-30 -0.457626 -1.274159 -0.1977951959-09-30 -2.181216 -0.860393 0.1427421959-12-31 1.532613 -1.294194 0.1276071960-03-31 -1.383715 0.558345 -0.132973
pivot只是个快捷方法,用第一部分转化的逆过程也可以得到结果。
temp_ldata = ldata.set_index(['date','item'])####设置层次化索引date、item,再旋转item索引可以展开res_ldata = temp_ldata.unstack('item') ###旋转行item为列res_ldata.head()Out[123]: value value2 item infl realgdp unemp infl realgdp unempdate 1959-03-31 0.00 2710.349 5.8 0.292680 -0.699746 0.6685321959-06-30 2.34 2778.801 5.1 -0.457626 -1.274159 -0.1977951959-09-30 2.74 2775.488 5.3 -2.181216 -0.860393 0.1427421959-12-31 0.27 2785.204 5.6 1.532613 -1.294194 0.1276071960-03-31 2.31 2847.699 5.2 -1.383715 0.558345 -0.132973
阅读全文
0 0
- 第7章 数据规整化:清理、转换、合并、重塑(4)
- 数据规整化:清理、转换、合并、重塑 《用Python进行数据分析》读书笔记第7章
- 《利用Python进行数据分析》笔记---第7章数据规整化:清理、转换、合并、重塑
- 第7章 数据规整化:清理、转换、合并、重塑 (1)
- 第7章 数据规整化:清理、转换、合并、重塑(2)
- 第7章 数据规整化:清理、转换、合并、重塑(3)
- 第7章 数据规整化:清理、转换、合并、重塑(5)
- 数据规整化:清理,转换,合并,重塑
- 数据规整化:清理、转换、合并、重塑
- 数据规整化:清理、转换、合并、重塑
- 数据规整化:清理、转换、合并、重塑
- 数据规整化:清理、转换、合并、重塑
- Python之数据规整化:清理、转换、合并、重塑
- chapter7-数据规整化:清理、转换、合并、重塑
- 利用Python进行数据分析——数据规整化:清理、转换、合并、重塑(七)(4) .
- 利用Python进行数据分析——数据规整化:清理、转换、合并、重塑(七)(5) .
- 利用Python进行数据分析--数据规整化:清理、转换、合并、重塑
- 利用python进入数据分析之数据规整化:清理、转换、合并、重塑(一)
- Samba案例
- 数据结构实验之图论八:欧拉回路
- Go实现二分法查找
- 第7章 数据规整化:清理、转换、合并、重塑(3)
- 用指针解决约瑟夫问题
- 第7章 数据规整化:清理、转换、合并、重塑(4)
- php curl请求http和https
- 进程控制
- 简单小项目:注释转换
- 火墙
- Git基础知识学习1
- 浅谈Java中的hashcode方法
- Python实现Pat 1032. Sharing (25)
- equals变量在前面或者在后面有什么区别吗?