zoukankan      html  css  js  c++  java
  • 基于 Python 和 Pandas 的数据分析(5) --- Concatenating and Appending

    这一节我们将会介绍几种不同的合并数据的方法.

    在我们这个不动产投资的例子中, 我们希望获取 51 个州的房产数据, 并把它们组合起来. 我们这样做有很多原因. 这样做既便于我们做分析, 同时也可以占用更少的内存. 目前, 每个 dataframe 都有一个 "date" 列和一个 "value" 列. 有一个规律是每个 dataframe 的 "date" 列的值都是完全重复的. 也就是说我们可以使这个列成为一个公共列.

    下面来讲下具体合并数据的方法. 主要有4种方法: Concatenation, joining, merging, and appending. 我们先讲 Concatenation. 下面是一个简单的例子:

    import pandas as pd
    
    df1 = pd.DataFrame({'HPI':[80,85,88,85],
                        'Int_rate':[2, 3, 2, 2],
                        'US_GDP_Thousands':[50, 55, 65, 55]},
                       index = [2001, 2002, 2003, 2004])
    
    df2 = pd.DataFrame({'HPI':[80,85,88,85],
                        'Int_rate':[2, 3, 2, 2],
                        'US_GDP_Thousands':[50, 55, 65, 55]},
                       index = [2005, 2006, 2007, 2008])
    
    df3 = pd.DataFrame({'HPI':[80,85,88,85],
                        'Int_rate':[2, 3, 2, 2],
                        'Low_tier_HPI':[50, 52, 50, 53]},
                       index = [2001, 2002, 2003, 2004])
    

    df1 和 df3 的索引完全相同, 但是有不同的列. df2 和 df3 的索引不同, 列也不同. 下面看一个简单的用 concatentation 合并数据的例子:

    concat = pd.concat([df1,df2])
    print(concat)
    

    输出:

           HPI  Int_rate  US_GDP_Thousands
    2001   80         2                50
    2002   85         3                55
    2003   88         2                65
    2004   85         2                55
    2005   80         2                50
    2006   85         3                55
    2007   88         2                65
    2008   85         2                55
    

    非常的简单. 两个被合并项的差别就在于索引不同, 列名都完全一样, 所以它们合并成了一个 dataframe. 但是在我们的例子中, 我们需要的增加更多的列, 而不是行. 那我们再来看下如果有不同的列名合并会怎样呢:

    concat = pd.concat([df1,df2,df3])
    print(concat)
    

    输出:

           HPI  Int_rate  Low_tier_HPI  US_GDP_Thousands
    2001   80         2           NaN              50.0
    2002   85         3           NaN              55.0
    2003   88         2           NaN              65.0
    2004   85         2           NaN              55.0
    2005   80         2           NaN              50.0
    2006   85         3           NaN              55.0
    2007   88         2           NaN              65.0
    2008   85         2           NaN              55.0
    2001   80         2          50.0               NaN
    2002   85         3          52.0               NaN
    2003   88         2          50.0               NaN
    2004   85         2          53.0               NaN
    

    我们看到有一些 NaN, 这是因为有的索引里不存在这个值. 但是至少所有的数据都在一起了.

    以上, 就是 concatenation 的基础用法. 下面来看下 appending. appending 的用法更像是第一个 concatenation 的例子. 下面看一个具体的例子:

    df4 = df1.append(df2)
    print(df4)
    

    输出:

           HPI  Int_rate  US_GDP_Thousands
    2001   80         2                50
    2002   85         3                55
    2003   88         2                65
    2004   85         2                55
    2005   80         2                50
    2006   85         3                55
    2007   88         2                65
    2008   85         2                55
    

    上面就是 appending 合并数据的效果. 在大多数情况下, 就像是往一个数据库里插入更多行. 那么如果要合并的数据具有相同的索引呢?

    df4 = df1.append(df3)
    print(df4)
    

    输出:

          HPI  Int_rate  Low_tier_HPI  US_GDP_Thousands
    2001   80         2           NaN              50.0
    2002   85         3           NaN              55.0
    2003   88         2           NaN              65.0
    2004   85         2           NaN              55.0
    2001   80         2          50.0               NaN
    2002   85         3          52.0               NaN
    2003   88         2          50.0               NaN
    2004   85         2          53.0               NaN
    

    哦, 这看来不是我们想要的结果.
    另外, 我们还可以 append 一个 series. series 可以看成是只有一列的 dataframe. series 是有索引的, 但是如果你把它转换成 list, 索引就省略了. 不论何时, df['column'] 返回的都是 series.

    s = pd.Series([80,2,50], index=['HPI','Int_rate','US_GDP_Thousands'])
    

    先看下 s 的数据结构:

    HPI                 80
    Int_rate             2
    US_GDP_Thousands    50
    

    再把 s 和 df1 合并:

    df4 = df1.append(s, ignore_index=True)
    print(df4)
    

    输出:

        HPI  Int_rate  US_GDP_Thousands
    0   80         2                50
    1   85         3                55
    2   88         2                65
    3   85         2                55
    4   80         2                50
    

    这里在合并的时候, 我们忽略了索引, 因为 series 没有名字.

    以上, 我们介绍了 Pandas 的 concatenation 和 append. 下一节, 我们将介绍 join 和 merge.

    后面会持续更新, 有任何问题或者错误, 欢迎留言, 希望和大家交流学习.



  • 相关阅读:
    zbpwdkcqodl
    POJ 3670 Eating Together(LIS)
    Linux_Oracle10 下载安装
    Android4.42-Settings源代码分析之蓝牙模块Bluetooth(上)
    从零開始怎么写android native service?
    Vim命令合集
    X的追求道路
    Ubuntu常见报错及解决方式汇总
    微信图片不可显示java解决方法
    jar 包中文乱码注释显示问题解决方案
  • 原文地址:https://www.cnblogs.com/rachelross/p/10381157.html
Copyright © 2011-2022 走看看