pythonmerge、join、concat⽤法与区别
由于合并变化较⼤,以后函数可能会修改,只给出⼀些例⼦作为参考
总结:
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
at([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
at([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
(data1,data2)
data
Out[26]:
Empty DataFrame
Columns: [a, b, c, y, z] #a列没有共同元素
Index: []
(data1,data2,on='a')
data
Out[28]:
Empty DataFrame
Columns: [a, b, c, y, z]
Index: []
(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
(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_ad_excel('A.xlsx',index_col=2).loc[:,'授信敞⼝额度'];print(data_a.head())
data_ad_excel('B.xlsx',index_col=0);print(data_b.head())
data_a=index(index=data_b.index)
data_b.iloc[:,9]=data_a
_excel('new_data.xlsx')
⽅法⼆:concat
print(data_a.index.is_unique,data_b.index.is_unique)
at([data_b,data_a],axis=1)
#True False
#ValueError: Shape of passed values is (21, 378), indices imply (21, 288)
因为索引有重复项,所以不能concat
dataframe中去掉重复⾏
df3 = df3[~df3.index.duplicated(keep='first')]
#下⾯只能去掉同样的⾏,不能去掉索引相同⾏元素不同⾏
data_a.drop_duplicates(inplace=True);data_b.drop_duplicates(inplace=True)
at([data_b,data_a],axis=1)
connect和join的区别
还是不可以,由于有索引,结果会按照索引排序。
⽅法三:join
data=data_b.join(data_a,how='outer')
<_excel('data_join.xlsx')
也不可以,排序不是按照B中的数据在前,A中有B中没有数据在后,不太满⾜要求,较前⾯两种⽅法好
⽅法四:merge
(data_b,data_a,left_index=True,right_index=True,how='outer')
<_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())
(a,b,on='客户名称',how='outer')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论