由于合并变化较大,以后函数可能会修改,只给出一些例子作为参考

总结:

merge、join

1、当没有索引时:merge、join为按照一定条件合并

2、当有索引、并按照索引合并时,得到结果为两者混合到一起了,重新按照一定规则排序了。

3、当没有索引时、concat不管列名,直接加到一起,可以加到后面、也可以加到右边,axis=0为加到后面,axis=1为加到右边,左边的数据结构没有变,变的是右边数据结构。

4、当有索引、并按照索引合并时,得到结果两者混合到一起了。

import pandas as pd
import numpy as np
from pandas import DataFrame,Series
data1=pd.DataFrame(np.arange(6).reshape(2,3),columns=list('abc'))
data2=pd.DataFrame(np.arange(20,26).reshape(2,3),columns=list('ayz')) data1
Out[33]:
a b c
0 0 1 2
1 3 4 5
data2
Out[34]:
a y z
0 20 21 22
1 23 24 25 data=pd.concat([data1,data2],axis=0)
data
Out[22]:
a b c y z
0 0 1.0 2.0 NaN NaN
1 3 4.0 5.0 NaN NaN
0 20 NaN NaN 21.0 22.0
1 23 NaN NaN 24.0 25.0
data=pd.concat([data1,data2],axis=1)
data
Out[24]:
a b c a y z
0 0 1 2 20 21 22
1 3 4 5 23 24 25
data=pd.merge(data1,data2)
data
Out[26]:
Empty DataFrame
Columns: [a, b, c, y, z] #a列没有共同元素
Index: []
data=pd.merge(data1,data2,on='a')
data
Out[28]:
Empty DataFrame
Columns: [a, b, c, y, z]
Index: []
data=pd.merge(data1,data2,on='a',how='outer')
data
Out[30]:
data
Out[30]:
a b c y z
0 0 1.0 2.0 NaN NaN
1 3 4.0 5.0 NaN NaN
2 20 NaN NaN 21.0 22.0
3 23 NaN NaN 24.0 25.0
data=pd.merge(data1,data2,how='outer')
data
Out[32]:
a b c y z
0 0 1.0 2.0 NaN NaN
1 3 4.0 5.0 NaN NaN
2 20 NaN NaN 21.0 22.0
3 23 NaN NaN 24.0 25.0

 MJ数据处理:

方法一:reindex

A(少量数据)中数据按照B的数据重新排序,再将A中数据放入到B某一列中

这样不行,重排列后A中特有数据没有了

import pandas as pd
import numpy as np
from pandas import DataFrame,Series
data_a=pd.read_excel('A.xlsx',index_col=2).loc[:,'授信敞口额度'];print(data_a.head())
data_b=pd.read_excel('B.xlsx',index_col=0);print(data_b.head())
data_a=data_a.reindex(index=data_b.index)
data_b.iloc[:,9]=data_a
data_b.to_excel('new_data.xlsx')

方法二:concat

https://stackoverflow.com/questions/27719407/pandas-concat-valueerror-shape-of-passed-values-is-blah-indices-imply-blah2

print(data_a.index.is_unique,data_b.index.is_unique)
data=pd.concat([data_b,data_a],axis=1) #True False
#ValueError: Shape of passed values is (21, 378), indices imply (21, 288)
因为索引有重复项,所以不能concat

dataframe中去掉重复行

https://stackoverflow.com/questions/13035764/remove-rows-with-duplicate-indices-pandas-dataframe-and-timeseries/34297689#34297689

df3 = df3[~df3.index.duplicated(keep='first')]
#下面只能去掉同样的行,不能去掉索引相同行元素不同行
data_a.drop_duplicates(inplace=True);data_b.drop_duplicates(inplace=True)
data=pd.concat([data_b,data_a],axis=1)

还是不可以,由于有索引,结果会按照索引排序。

方法三:join

data=data_b.join(data_a,how='outer')
data.to_excel('data_join.xlsx')

也不可以,排序不是按照B中的数据在前,A中有B中没有数据在后,不太满足要求,较前面两种方法好

方法四:merge

data=pd.merge(data_b,data_a,left_index=True,right_index=True,how='outer')
data.to_excel('data_merge.xlsx')

与join方法得到结果一致,一样功能,不太满足需求。

方法五:merge

##合并数据不放在索引上,放在列上,没有索引,按列进行合并,结果直接在后面加,排列默认以合并左边列先排列,再排右边列。
#如果把公共列放在索引上,则返回结果会排序,merge、concat、join都会。
a = pd.read_excel('8月.xlsx')
b = pd.read_excel('8月末.xlsx')
print(b.head(),a.head())
c=pd.merge(a,b,on='客户名称',how='outer')

python merge、join、concat用法与区别的更多相关文章

  1. python merge、concat合并数据集

    数据规整化:合并.清理.过滤 pandas和python标准库提供了一整套高级.灵活的.高效的核心函数和算法将数据规整化为你想要的形式! 本篇博客主要介绍: 合并数据集:.merge()..conca ...

  2. python pandas 合并数据函数merge join concat combine_first 区分

    pandas对象中的数据可以通过一些内置的方法进行合并:pandas.merge,pandas.concat,实例方法join,combine_first,它们的使用对象和效果都是不同的,下面进行区分 ...

  3. merge,join,concat

    merge交集 join并集 concat axis=0 竖着连 axis=1 横着连

  4. Python多线程join的用法

    import threading, time def Myjoin(): print 'hello world!' time.sleep(1) for i in range(5): t=threadi ...

  5. python中join的用法

    str.join(sequence) # 将序列中的元素以str字符连接生成一个新的字符串 list1 = ['a', 'b', 'c'] new_str = '-'.join(list1) # 输出 ...

  6. python中join函数用法

    str.join(list/tuple/dict/string) str = "-"; seq = ("a", "b", "c&q ...

  7. python中一些相似用法的区别:index()和find(),dict[]和get()

    index和find在字符串中的区别: index()方法和find()方法相似,唯一的区别就是find方法不包含索引值会返回-1,而index()不包含索引值会抛出异常   同样的:获取字典dict ...

  8. python ord()与chr()用法以及区别

    ord()函数主要用来返回对应字符的ascii码,chr()主要用来表示ascii码对应的字符他的输入时数字,可以用十进制,也可以用十六进制. >>> ord("a&quo ...

  9. Python中threading的join和setDaemon的区别及用法[例子]

    Python多线程编程时,经常会用到join()和setDaemon()方法,今天特地研究了一下两者的区别. 1.join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join() ...

随机推荐

  1. Linux中制作静态库

    静态库生成: 1.第一步:生成.o文件 2.第二步:将所有.o文件打包 ar src  libMyTest.a  *.o 生成出libMyTest.a 3.使用: 第一种:gcc  main.c    ...

  2. 第七届蓝桥杯javaB组真题解析-抽签(第五题)

    题目 /* 抽签 X星球要派出一个5人组成的观察团前往W星. 其中: A国最多可以派出4人. B国最多可以派出2人. C国最多可以派出2人. .... 那么最终派往W星的观察团会有多少种国别的不同组合 ...

  3. Vulnhub_DC1 记录

    目录 Vulnhub_DC1 记录 经验 & 总结 步骤流水 1. 建立立足点 2. 提权 3. 主机信息搜集 4. 继续提权 5. 消失的flag Vulnhub_DC1 记录 参考walk ...

  4. oracle的concat、convert、listagg函数(字符串拼接和类型转换)

    ORACLE几种常用的方法(2) 1.concat常见的用法 : 格式:concat(String1,String2) 说明:concat函数用于将两个字符串连接起来,形成一个单一的字符串 实例: s ...

  5. PAT T1002 Business

    背包问题,把任务按截止日期排序,再按背包问题处理~ #include<bits/stdc++.h> using namespace std; ; struct node { int c; ...

  6. BZOJ 4167: 永远的竹笋采摘

    首先同BZOJ5052 \(O(n \log n \log v)\) 求出所有点对 现在变成选出 \(k\) 条不相交的线段使得权值最小 可用前缀min优化dp \(O(nk)\) 解决 还是太慢,考 ...

  7. tensorflow版helloworld---拟合线性函数的k和b(02-4)

    给不明白深度学习能干什么的同学,感受下深度学习的power import tensorflow as tf import numpy as np #使用numpy生成100个随机点 x_data=np ...

  8. 学习不一样的vue4:mock与axios实战1

    学习不一样的vue4:mock与axios实战1  发表于 2017-06-14 |  分类于 web前端|  |  阅读次数 8180 首先 首发博客: 我的博客 项目源码: 源码(喜欢请star) ...

  9. 三大JavaScript框架对比——AngularJS、BackboneJS和EmberJS

    <三大JavaScript框架对比——AngularJS.BackboneJS和EmberJS> 本文转载自  作者:chszs,博客主页:http://blog.csdn.net/chs ...

  10. centos7中redis安装

    官网地址:http://redis.io/ 官网下载地址:http://redis.io/download 1. 下载Redis源码(tar.gz),并上传到Linux:或 wget http://d ...