Pandas合并数据集之concat、combine_first方法
轴向连接(concat)
Numpy
import numpy as np
import pandas as pd
from pandas import Series
arr = np.arange(12).reshape(3,4)
arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
# axis默认为行,想合并列可以设置axis=1
np.concatenate([arr,arr])
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
pandas对象的轴向连接
# 三个没有重叠的索引合在一起
s1 = Series([0,1],index=['a','b'])
s2 = Series([2,3,4],index=['c','d','e'])
s3 = Series([5,6], index=['f','g'])
# concat对象里面需要接受一个可迭代的对象
pd.concat([s1,s2,s3])
a 0
b 1
c 2
d 3
e 4
f 5
g 6
dtype: int64
# 如果传入axis=1,则多一个轴方向,会变成DataFrame
pd.concat([s1,s2,s3],axis=1)
0 1 2
a 0.0 NaN NaN
b 1.0 NaN NaN
c NaN 2.0 NaN
d NaN 3.0 NaN
e NaN 4.0 NaN
f NaN NaN 5.0
g NaN NaN 6.0
s4 = pd.concat([s1*5,s3])
s4
a 0
b 5
f 5
g 6
dtype: int64
# 默认合并的还是outer
pd.concat([s1,s4],axis=1)
0 1
a 0.0 0
b 1.0 5
f NaN 5
g NaN 6
# 默认合并的还是outer,如果想得到合并的交集,则指定join = 'inner'
pd.concat([s1,s4],axis=1,join='inner')
0 1
a 0 0
b 1 5
# 指定要合并的索引名,如果没有,则合并为NaN
pd.concat([s1,s4],axis=1,join_axes=[['a','b','c','e']])
0 1
a 0.0 0.0
b 1.0 5.0
c NaN NaN
e NaN NaN
#在合并行索引上创建一个层次化索引,keys参数
pd.concat([s1,s4],keys=['one','two','three'])
one a 0
b 1
two a 0
b 5
f 5
g 6
dtype: int64
pd.concat([s1,s2,s3],axis=1)
0 1 2
a 0.0 NaN NaN
b 1.0 NaN NaN
c NaN 2.0 NaN
d NaN 3.0 NaN
e NaN 4.0 NaN
f NaN NaN 5.0
g NaN NaN 6.0
#如果沿着axis=1对Series进行合并,则keys就会成为DATAFrame的列名
pd.concat([s1,s2,s3],axis=1,keys=['one','two','three'])
one two three
a 0.0 NaN NaN
b 1.0 NaN NaN
c NaN 2.0 NaN
d NaN 3.0 NaN
e NaN 4.0 NaN
f NaN NaN 5.0
g NaN NaN 6.0
DataFrame的concat操作
df1 = pd.DataFrame(np.arange(6).reshape(3,2),index=['a','b','c'],columns=['one','two'])
df1
one two
a 0 1
b 2 3
c 4 5
df2 = pd.DataFrame(5 + np.arange(4).reshape(2,2),index=['a','c'],columns=['three','four'])
df2
three four
a 5 6
c 7 8
# 合并列
pd.concat([df1,df2],axis=1)
one two three four
a 0 1 5.0 6.0
b 2 3 NaN NaN
c 4 5 7.0 8.0
# 如果传入的不是列表而是一个字典,则字典的键就是层次化索引列名
pd.concat({'level1':df1,'level2':df2},axis=1)
level1 level2
one two three four
a 0 1 5.0 6.0
b 2 3 NaN NaN
c 4 5 7.0 8.0
# names的命名是层次化索引的行标签,upper行对应level1,level2
pd.concat([df1,df2],axis=1,keys=['level1','level2'],names=['upper','lower'])
upper level1 level2
lower one two three four
a 0 1 5.0 6.0
b 2 3 NaN NaN
c 4 5 7.0 8.0
df3 = pd.DataFrame(np.random.randn(3,4),columns=['a','b','c','d'])
df4 = pd.DataFrame(np.random.randn(2,3),columns=['b','d','a'])
# 这样的行索引重复的难看要死,可以关闭了,ignore_index=True
pd.concat([df3,df4])
a b c d
0 0.649869 -0.332470 0.918562 -1.781167
1 -0.271012 0.702998 -2.164433 0.185556
2 0.279104 -0.846209 -0.366614 0.444451
0 -0.204010 -0.974424 NaN -2.215621
1 0.504930 0.490877 NaN 0.332790
#ingore_index启用后,行索引就会自增
pd.concat([df3,df4],ignore_index=True)
a b c d
0 0.649869 -0.332470 0.918562 -1.781167
1 -0.271012 0.702998 -2.164433 0.185556
2 0.279104 -0.846209 -0.366614 0.444451
3 -0.204010 -0.974424 NaN -2.215621
4 0.504930 0.490877 NaN 0.332790
合并重叠数据(combine_first)
a = Series([np.nan,2.5,np.nan,3.5,4.5,np.nan],index=['f','e','d','c','b','a'])
a
f NaN
e 2.5
d NaN
c 3.5
b 4.5
a NaN
dtype: float64
b = Series(np.arange(len(a),dtype=np.float64),index=['f','e','d','c','b','a'])
b
f 0.0
e 1.0
d 2.0
c 3.0
b 4.0
a 5.0
dtype: float64
# where(条件,真值,假值),这里a数据集有null条件成立,故返回b的值
np.where(pd.isnull(a),b,a)
array([0. , 2.5, 2. , 3.5, 4.5, 5. ])
a[2:]
d NaN
c 3.5
b 4.5
a NaN
dtype: float64
b[:-2]
f 0.0
e 1.0
d 2.0
c 3.0
dtype: float64
# 用a的数据填补b,如果有重复的以b为准
b[:-2].combine_first(a[2:])
a NaN
b 4.5
c 3.0
d 2.0
e 1.0
f 0.0
dtype: float64
# 用b的数据填补a,如果有重复的,以a为准
a[2:].combine_first(b[:-2])
a NaN
b 4.5
c 3.5
d 2.0
e 1.0
f 0.0
dtype: float64
Pandas合并数据集之concat、combine_first方法的更多相关文章
- Pandas合并数据集之merge、join方法
合并数据集 pandas.merge 可根据一个或多个键将不同DataFrame中的行连接起来. pandas.concat 可以沿着一条轴将多个对象堆叠到一起. combine_first merg ...
- Python数据科学手册-Pandas:合并数据集
将不同的数据源进行合并 , 类似数据库 join merge . 工具函数 concat / append pd.concat() 简易合并 合并高维数据 默认按行合并. axis=0 ,试试 axi ...
- pandas合并数据集-【老鱼学pandas】
有两个数据集,我们想把他们的结果根据相同的列名或索引号之类的进行合并,有点类似SQL中的从两个表中选择出不同的记录并进行合并返回. 合并 首先准备数据: import pandas as pd imp ...
- pandas(七)数据规整化:清理、转换、合并、重塑之合并数据集
pandas对象中的数据可以通过一些内置的方式进行合并: pandas.merge 可根据一个或多个键将不同的DataFrame中的行连接起来. pandas.concat可以沿着一条轴将多个对象堆叠 ...
- python merge、concat合并数据集
数据规整化:合并.清理.过滤 pandas和python标准库提供了一整套高级.灵活的.高效的核心函数和算法将数据规整化为你想要的形式! 本篇博客主要介绍: 合并数据集:.merge()..conca ...
- Pandas 合并 concat
pandas处理多组数据的时候往往会要用到数据的合并处理,使用 concat是一种基本的合并方式.而且concat中有很多参数可以调整,合并成你想要的数据形式. 1.axis(合并方向):axis=0 ...
- MySQL把多个字段合并成一条记录的方法
转:http://www.111cn.net/database/mysql/71591.htm MySQL把多个字段合并成一条记录的方法 在mysql中字段合并可以使用很多函数来实现,如可以利用 GR ...
- JS合并两个数组的方法
JS合并两个数组的方法 我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况.比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合 ...
- python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件)
# python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件) import tkinter as tk from tkinter import filedial ...
随机推荐
- Spring history&Design Philosophy 简单介绍~
SPRING框架的介绍和历史 Spring Framework是一个开源Java应用程序框架,最初是基于依赖注入(DI)和控制反转(IoC)的原理开发的. Spring Framework已经成长为控 ...
- Introduction of filter in servlet
官方给出的Filter的定义是在请求一个资源或者从一个资源返回信息的时候执行过滤操作的插件.我们使用过滤起最多的场景估计就是在请求和返回时候的字符集转换,或者权限控制,比如一个用户没有登录不能请求某些 ...
- 解决yii2 禁用layout时AppAsset不加载资源的问题
大王派我来巡山_site:http://blog.csdn.net/wang78699425/article/details/52369841 最近由于项目(yii2 的一个项目)需要,登录页面不需要 ...
- MyBatis举例以及连接数据库过程
第一:创建实体类 package entity; public class Emp { private int empno; private String ename; private String ...
- python中时间、日期、时间戳的转换
1.简介 在编写代码时,往往涉及时间.日期.时间戳的相互转换. 2.示例 # 引入模块 import time, datetime 2.1 str类型的日期转换为时间戳 # 字符类型的时间 tss1 ...
- JAVA中的System.in
System.in读取标准输入设备数据(从标准输入获取数据,一般是键盘),其数据类型为InputStream.方法: int read() // 返回输入数值的ASCII码,,该值为0到 255范 ...
- vs2015 加载项目的时启动:无法启动 IIS Express Web 服务器
使用Visual Studio 2015 运行ASP.NET项目时,提示“无法启动IIS Express Web服务器”,无法运行,如图: 一般出现在重装系统之后,或者项目是从别的电脑上复制过来的.解 ...
- 记录一个Q版openstack搭建教程地址
https://blog.csdn.net/networken/article/details/80682437 感谢这篇文章的作者,文档很详细,记录一下,希望对大家有帮助.
- Flask--(项目准备)--框架搭建,配置文件抽取,业务逻辑抽取
抽取配置文件: import logging from redis import StrictRedis class Config(object): """项目的配置&q ...
- jvm--深入理解java虚拟机 精华总结(面试)(转)
深入理解java虚拟机 精华总结(面试)(转) 原文地址:http://www.cnblogs.com/prayers/p/5515245.html 一.运行时数据区域 3 1.1 程序计数器 3 1 ...