资讯专栏INFORMATION COLUMN

PYTHON PANDAS之数据重塑(Data Reshaping)

stefan / 1421人阅读

摘要:实际遇到的问题在文件当中或者数据库当的数据通常以长格式或者堆叠格式存储,特别是金融数据中出现的时间序列数据,例如那怎么才能变成以作为列名,同时日期为索引的呢特别需要对同时进行时间序列分析时,这个需求特别强烈。

实际遇到的问题

在CSV文件当中或者数据库当的数据通常以长格式或者(stacked)堆叠格式存储,特别是金融数据中出现的时间序列数据,例如:

In [1]: df
Out[1]: 
         date variable     value
0  2000-01-03        A  0.469112
1  2000-01-04        A -0.282863
2  2000-01-05        A -1.509059
3  2000-01-03        B -1.135632
4  2000-01-04        B  1.212112
5  2000-01-05        B -0.173215
6  2000-01-03        C  0.119209
7  2000-01-04        C -1.044236
8  2000-01-05        C -0.861849
9  2000-01-03        D -2.104569
10 2000-01-04        D -0.494929
11 2000-01-05        D  1.071804

那怎么才能变成以A,B,C,D作为列名,同时日期为索引的dataframe呢?特别需要对A,B,C,D同时进行时间序列分析时,这个需求特别强烈。

解决方案:
这里引出一个重要的概念,data reshaping,即数据重塑,

选出变量A的所有数据我们只需要如下操作,然后分别选出B,C,D,然后再再水平方向进行concat操作,这样当然也可以得到指定的数据框,但这样无疑编写、执行效率都有点低:

In [2]: df[df["variable"] == "A"]
Out[2]: 
        date variable     value
0 2000-01-03        A  0.469112
1 2000-01-04        A -0.282863
2 2000-01-05        A -1.509059

但是如果我们希望对变量进行时间序列操作,那么我们可能将需要将每个变量多带带作为一列来表示,因此需要使用pivot()函数对数据进行reshape操作:

In [3]: df.pivot(index="date", columns="variable", values="value")
Out[3]: 
variable           A         B         C         D
date                                              
2000-01-03  0.469112 -1.135632  0.119209 -2.104569
2000-01-04 -0.282863  1.212112 -1.044236 -0.494929
2000-01-05 -1.509059 -0.173215 -0.861849  1.071804

如果上述函数当中的values参数被省略,得到的dataframe就会有带有层次化的列,列的顶层是带每个值列的列名,假如我们现在有value1,value2两列:

In [4]: df["value2"] = df["value"] * 2

In [5]: pivoted = df.pivot("date", "variable")

In [6]: pivoted
Out[6]: 
               value                                  value2            
variable           A         B         C         D         A         B   
date                                                                     
2000-01-03  0.469112 -1.135632  0.119209 -2.104569  0.938225 -2.271265   
2000-01-04 -0.282863  1.212112 -1.044236 -0.494929 -0.565727  2.424224   
2000-01-05 -1.509059 -0.173215 -0.861849  1.071804 -3.018117 -0.346429   

                                
variable           C         D  
date                            
2000-01-03  0.238417 -4.209138  
2000-01-04 -2.088472 -0.989859  
2000-01-05 -1.723698  2.143608  

对于以上多层次列数据框,此时也可以只显示value2这一列:

In [7]: pivoted["value2"]
Out[7]: 
variable           A         B         C         D
date                                              
2000-01-03  0.938225 -2.271265  0.238417 -4.209138
2000-01-04 -0.565727  2.424224 -2.088472 -0.989859
2000-01-05 -3.018117 -0.346429 -1.723698  2.143608

可见pivot()函数是一个非常实用的,用来实现数据重塑的方法。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41429.html

相关文章

  • 数据科学系统学习】Python # 数据分析基本操作[四] 数据规整化和数据聚合与分组运算

    摘要:数据规整化清理转换合并重塑数据聚合与分组运算数据规整化清理转换合并重塑合并数据集可根据一个或多个键将不同中的行链接起来。函数根据样本分位数对数据进行面元划分。字典或,给出待分组轴上的值与分组名之间的对应关系。 本篇内容为整理《利用Python进行数据分析》,博主使用代码为 Python3,部分内容和书本有出入。 在前几篇中我们介绍了 NumPy、pandas、matplotlib 三个...

    The question 评论0 收藏0
  • Python 数据分析 pandas 进阶(二)

    摘要:九时间序列时区表示时区转换时区跨度转换十画图图片描述十一从版本开始,可以在中支持类型的数据。 六、分组 对于group by操作,我们通常是指以下一个或多个操作步骤:(Splitting)按照一些规则将数据分为不同的组(Applying)对于每组数据分别执行一个函数(Combining)将结果组合刀一个数据结构中将要处理的数组是: df = pd.DataFrame({ ...

    lingdududu 评论0 收藏0
  • Pandas库基础分析——数据规整化处理

    摘要:前言在数据分析和建模之前需要审查数据是否满足数据处理应用的要求,以及对数据进行清洗,转化,合并,重塑等一系列规整化处理。通过数据信息查看可知数据中存在缺失值,比如各存在个,各存在个。 前言 在数据分析和建模之前需要审查数据是否满足数据处理应用的要求,以及对数据进行清洗,转化,合并,重塑等一系列规整化处理。pandas标准库提供了高级灵活的方法,能够轻松地将数据规整化为正确的形式,本文通...

    roundstones 评论0 收藏0
  • 数据科学系统学习】Python # 数据分析基本操作[二] pandas

    摘要:中面向行和面向列的操作基本是平衡的。用层次化索引,将其表示为更高维度的数据。使用浮点值表示浮点和非浮点数组中的缺失数据。索引的的格式化输出形式选取数据子集在内层中进行选取层次化索引在数据重塑和基于分组的操作中很重要。 我们在上一篇介绍了 NumPy,本篇介绍 pandas。 pandas入门 Pandas 是基于Numpy构建的,让以NumPy为中心的应用变的更加简单。 pandas...

    jayzou 评论0 收藏0
  • Python 实现最小二乘法拟合直线

    摘要:线性回归线性回归是回归分析中最常见的一种建模方式。当因变量是连续的,自变量是连续的或者离散的,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。 线性回归 线性回归是回归分析中最常见的一种建模方式。当因变量是连续的,自变量是连续的或者离散的,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。用方程 y = mx + c,其中 y为结果,x为特征,m为...

    woshicixide 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<