pandas数据规整化:清理转换合并重塑之合并数据集

Posted 左手十字

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas数据规整化:清理转换合并重塑之合并数据集相关的知识,希望对你有一定的参考价值。

pandas对象中的数据可以通过一些内置的方式进行合并:

 pandas.merge 可根据一个或多个键将不同的DataFrame中的行连接起来。

pandas.concat可以沿着一条轴将多个对象堆叠到一起

实例的方法conbine_first 可以将重复的数据编接到一起,用一个对象中的值填充另一个对象的缺失值。

数据库风格的DataFrame合并

In [51]: df1 = DataFrame({key:[b,b,a,c,a,a,b],data1:range(7)})
In [53]: df2 = DataFrame({key:[a,b,d],data2:range(3)})

In [54]: df1
Out[54]:
   data1 key
0      0   b
1      1   b
2      2   a
3      3   c
4      4   a
5      5   a
6      6   b

In [55]: df2
Out[55]:
   data2 key
0      0   a
1      1   b
2      2   d

In [56]: pd.merge(df1,df2)
Out[56]:
   data1 key  data2
0      0   b      1
1      1   b      1
2      6   b      1
3      2   a      0
4      4   a      0
5      5   a      0

 

默认不显式指明用哪个键进行连接的时候,merge会将重叠列的列名当做键。不过,最好显式的指明:

In [57]: pd.merge(df1,df2,on = ‘key‘)

如果两个列的列名不同,可以分别指定

In [58]: df4 = DataFrame({key-r:[a,b,d],data2:range(3)})

In [59]: df3 = DataFrame({key-l:[b,b,a,c,a,a,b],data1:range(7)})


In [63]: pd.merge(df3,df4,left_on = key-l,right_on = key-r)
Out[63]:
   data1 key-l  data2 key-r
0      0     b      1     b
1      1     b      1     b
2      6     b      1     b
3      2     a      0     a
4      4     a      0     a
5      5     a      0     a

默认情况下,merge做的是‘inner’连接,merge还有left、right和outer:

In [64]: pd.merge(df1,df2,how=outer)
Out[64]:
   data1 key  data2
0    0.0   b    1.0
1    1.0   b    1.0
2    6.0   b    1.0
3    2.0   a    0.0
4    4.0   a    0.0
5    5.0   a    0.0
6    3.0   c    NaN
7    NaN   d    2.0

如果要根据多个键进行合并,传入一个由列名组成的列表即可。

In [65]: left = DataFrame({key1:[a,a,b],key2:[one,two,one],lrow:[1,2,3]})

In [66]: right = DataFrame({key1:[a,a,b,b],key2:[one,one,one,two],rrow:[4,5,6,7]})

In [67]: pd.merge(left,right,on = [key1,key2])
Out[67]:
  key1 key2  lrow  rrow
0    a  one     1     4
1    a  one     1     5
2    b  one     3     6

 

如果合并的列中存在重复的列,可以指定重复的列的后缀进行区分

In [68]: pd.merge(left,right,on = [key1])
Out[68]:
  key1 key2_x  lrow key2_y  rrow
0    a    one     1    one     4
1    a    one     1    one     5
2    a    two     2    one     4
3    a    two     2    one     5
4    b    one     3    one     6
5    b    one     3    two     7
#指定列名
In [71]: pd.merge(left,right,on = [key1],suffixes=[_eft,_right])
Out[71]:
  key1 key2_eft  lrow key2_right  rrow
0    a      one     1        one     4
1    a      one     1        one     5
2    a      two     2        one     4
3    a      two     2        one     5
4    b      one     3        one     6
5    b      one     3        two     7

 

以上是关于pandas数据规整化:清理转换合并重塑之合并数据集的主要内容,如果未能解决你的问题,请参考以下文章

利用python进行数据分析之数据规整化

数据规整:聚合合并和重塑 Pandas

利用Python进行数据分析-Pandas(第五部分-数据规整:聚合合并和重塑)

数据规整:聚合合并和重塑

pandas小记:pandas数据规整化

python数据分析之:数据清理,转换,合并,重塑