基于 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.
后面会持续更新, 有任何问题或者错误, 欢迎留言, 希望和大家交流学习.
基于 Python 和 Pandas 的数据分析(5) --- Concatenating and Appending的更多相关文章
- 基于 Python 和 Pandas 的数据分析(1)
基于 Python 和 Pandas 的数据分析(1) Pandas 是 Python 的一个模块(module), 我们将用 Python 完成接下来的数据分析的学习. Pandas 模块是一个高性 ...
- 基于 Python 和 Pandas 的数据分析(4) --- 建立数据集
这一节我想对使用 Python 和 Pandas 的数据分析做一些扩展. 假设我们是亿万富翁, 我们会想要多元化地进行投资, 比如股票, 分红, 金融市场等, 那么现在我们要聚焦房地产市场, 做一些这 ...
- 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础
在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...
- 基于 Python 和 Pandas 的数据分析(7) --- Pickling
上一节我们介绍了几种合并数据的方法. 这一节, 我们将重新开始不动产的例子. 在第四节中我们写了如下代码: import Quandl import pandas as pd fiddy_states ...
- 基于 Python 和 Pandas 的数据分析(3) --- 输入/输出 基础
这一节, 我们要讨论 Pandas 的输入与输出, 并且应用在现实的实际例子中. 为了得到大量的数据, 向大家推荐一个网站 Quandl. Quandl 有很多免费和付费的资源. 这个网站最大的优势在 ...
- 基于 Python 和 Pandas 的数据分析(6) --- Joining and Merging
这一节我们将看一下如何通过 join 和 merge 来合并 dataframe. import pandas as pd df1 = pd.DataFrame({'HPI':[80,85,88,85 ...
- python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言)
python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言) 感觉要总结总结了,希望这次能写个系列文章分享分享心得,和大神们交流交流,提升提升. 因为 ...
- 万字长文,Python数据分析实战,使用Pandas进行数据分析
文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...
- 基于python 信用卡评分系统 的数据分析
基于python 信用卡评分系统 的数据分析 import pandas as pd import matplotlib.pyplot as plt #导入图像库 from sklearn.ensem ...
随机推荐
- WEB前端移动开发初始化
meta篇 1.视窗宽度 <meta name="viewport" content="width=device-width,initial-scale=1.0,m ...
- qt creator翻译流程
一,下载qt creator软件包,最好是5.3, 本人是Win7,64位电脑,下载的是qt-opensource-windows-x86-mingw482_opengl-5.3.0.ex ...
- 1069: 统计字符gets函数
题目描述 编制程序,统计文本stdin中字符$出现的次数,并将结果写入文件stdout 输入 字符文本 输出 $次数 样例输入 as$dfkjhkjkjdhf asdfkj$lskdfj werijw ...
- python 关键字yield解析
python 关键字yield解析 yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.y ...
- Django项目----快速实现增删改查组件(起步阶段!!!)
一.相关知识点回顾 1.什么是反射? 可以用字符串的方式去访问对象的属性 2.反射有四种方法? hasattr(object,name):判断一个对象是不是有name属性或者方法 getattr: ...
- POJ 1308 Is It A Tree?和HDU 1272 小希的迷宫
POJ题目网址:http://poj.org/problem?id=1308 HDU题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1272 并查集的运用 ...
- 翻唱 - shape of you - 个个版本
翻唱: http://7j1xky.com1.z0.glb.clouddn.com/1525514286196.mp4 乐队版-我的翻唱-混合 http://7j1xky.com1.z0.glb.cl ...
- Aria2 使用手札(简易部署 + 快速进阶)
没错,又是受够了迅雷.旋风的各种奇葩减速(哥哥我还买了了VIP!),IDM 对协议支持又太少还有事没事提示你不是正版三天两头闹着要更新.于是我想起来之前看到过的 Aria2,虽然之前也只是略有耳闻,但 ...
- win7使用问题解决
1. VM和主机互相PING不通 问题:桥接模式,VM可以ping 通外网,可以ping 通局域网其它机子,就是ping 不通本地主机 解决:将 vm网卡和本地网连接网卡都共享出来
- 1、pandas使用sort_values排序
用Numpy库的randn函数生成一个完整的DataFrame: DataFrame有多个参数: data就是要转换成DataFrame的内容,很多数据类型都可以转换成DataFrame,比如:Ser ...