pandas中合并数据集

数据集的合并🔍

1、pandas.merge()

对于数据库风格的DataFrame进行联合

  • 语法👇:

pandas.merge(left, right, how=’inner’, on=None)

left:参与合并的左侧DataFrame。
right:参与合并的右侧DataFrame。
how:指DataFrame的连接方式。默认为inner, inner_是使用两个表都有的键( _多对多连接 是行的笛卡尔积)——这里可以理解为:比如2对2,首先左边的1对完右边的1和2之后,在左边的2对右边的1和2,因此结果中排列组合实际就是32个结果;left使用左表中所有的键;right使用右表中所有的键;outer使用 两个表中所有 的键。
on:用于连接的列名,必须同时存在于左右两个DataFrame对象中。如果未指定,则以left和right列名的交集作为连接键。
left_on:左侧DataFrame中用作连接键的列。
right_on:右侧DataFrame中用作连接键的列。
left_index:将左侧的行索引用作其连接键。
right_index:将右侧的行索引用作其连接键。
sort:根据连接件对合并后的数据进行排序,默认为True。(有时在处理大数据集时,禁用该选项可获得更好的性能)
suffixes:在重叠情况下,添加到列名后的字符串元组;默认是(‘_x’,’_y’)(例如如果待合并的DataFrame中都含有’data’列,那么结果中会出现’data_x’,’data_y’)。
copy:如果为False,则在某些特殊情况下避免将数据复制到结果数据中;默认情况下总是复制。
indicator*:添加一个特殊的列_merge,指示每一行的来源;值将根据每行中连接数据的来源分别为’left_only’,’right_only’或’both’。

  • 例子🌰
>>>df1=pd.DataFrame({'key':['b','b','a','c','a','b'],
                  'data1':range(6)})
>>>df2=pd.DataFrame({'key':['a','b','a','b','d'],
                         'data2':range(5)})
>>>df1
  key   data1
0   b   0
1   b   1
2   a   2
3   c   3
4   a   4
5   b   5
>>>df2
  key  data2
0   a      0
1   b      1
2   a      2
3   b      3
4   d      4
>>>pd.merge(df1,df2,on='key',how='left')
   key  data1  data2
0    b      0    1.0
1    b      0    3.0
2    b      1    1.0
3    b      1    3.0
4    a      2    0.0
5    a      2    2.0
6    c      3    NaN
7    a      4    0.0
8    a      4    2.0
9    b      5    1.0
10   b      5    3.0
>>>pd.merge(df1,df2,how='inner')
  key  data1  data2
0   b      0      1
1   b      0      3
2   b      1      1
3   b      1      3
4   b      5      1
5   b      5      3
6   a      2      0
7   a      2      2
8   a      4      0
9   a      4      2

2、join方法

用于按照索引合并

  • 这个函数比较简单,直接举例🌰
>>>left2=pd.DataFrame([[1.,2.],[3.,4.],[5.,6.]],
                      index=['a','c','e'],
                      columns=['Ohio','Nevada'])
>>>right2=pd.DataFrame([[7.,8.],[9.,10.],[11.,12.],[13.,14.]],
                       index=['b','c','d','e'],
                       columns=['Missouri','Alabama'])
>>>left2
    Ohio  Nevada
a    1.0     2.0
c    3.0     4.0
e    5.0     6.0
>>>right2
   Missouri  Alabama
b       7.0      8.0
c       9.0     10.0
d      11.0     12.0
e      13.0     14.0
>>>left2.join(right2,how='outer')
   Ohio  Nevada  Missouri  Alabama
a   1.0     2.0       NaN      NaN
b   NaN     NaN       7.0      8.0
c   3.0     4.0       9.0     10.0
d   NaN     NaN      11.0     12.0
e   5.0     6.0      13.0     14.0
>>>another=pd.DataFrame([[7.,8.],[9.,10.],[11.,12.],[16.,17.]],
                        index=['a','c','e','f'],
                        columns=['New York','Oregon'])
>>>another
    New York    Oregon
a        7.0       8.0
c        9.0      10.0
e       11.0      12.0
f       16.0      17.0
>>>left2.join([right2,another])
   Ohio   Nevada   Missouri   Alabama   New York   Oregon
a   1.0      2.0        NaN       NaN        7.0      8.0
c   3.0      4.0        9.0      10.0        9.0     10.0
e   5.0      6.0       13.0      14.0       11.0     12.0
'''由于一些历史原因(pandas版本过低),DataFrame的join方法进行连接键上的左连接,完全保留左边DataFrame的行索引。
它还支持在调用DataFrame的某一列上连接传递的DataFrame的索引:'''
>>>left1=pd.DataFrame({'key':['a','b','a','a','b','c'],
                    'value':range(6)})
>>>right1=pd.DataFrame({'group_val':[3.5,7]},
                    index=['a','b'])
>>>left1
  key   value
0   a       0
1   b       1
2   a       2
3   a       3
4   b       4
5   c       5

3、 对于 NumPy数组的拼接或绑定, numpy.concatenate() 方法可以实现。

  • 例子🌰
>>>arr=np.arange(12).reshape((3,4))
>>>arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>np.concatenate([arr,arr],axis=1)
array([[ 0,  1,  2,  3,  0,  1,  2,  3],
       [ 4,  5,  6,  7,  4,  5,  6,  7],
       [ 8,  9, 10, 11,  8,  9, 10, 11]])

4、pandas.concat()

  • 语法👇:

pandas.concat(objs,axis=0, join=’outer’, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)

objs: 参与连接的pandas对象的列表或字典。唯一必需的参数。
axis: 指明连接的轴向(0为”index”,1为”columns”),默认为0.

join: “inner”或”outer”,默认为”outer”。指明其他轴向上的索引是按交集(inner)还是并集(outer)进行合并。
keys: 与连接对象有关的值,用于形成连接轴向上的层次化索引。可以是任意值的列表或数组、元组数组、数组列表(如果将levels设置成多级数组的话)
levels: 指定用作层次化索引各级别上的索引 好累明天继续写吧

Original: https://blog.csdn.net/weixin_43421371/article/details/120870823
Author: Quinn-ntmy
Title: pandas中合并数据集

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/675475/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球