【机器学习杂烩篇】Pandas merge( )合并

merge( )合并需要指定连接键。

多对一的合并操作

on参数

指明单个连接键

In [5]: df1=pd.DataFrame({'key':['b','b','a','a','b','a','c'],'data1':range(7)})

In [6]: df2=pd.DataFrame({'key':['a','b','d'],'data2':range(3)})

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

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

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

指明多个连接键

In [4]: df7=pd.DataFrame({'key1':['b','b','a','a','b','a','c'],'key2':['i','j','k','k','i','j','k'],'data1':range(7)})

In [5]: df8=pd.DataFrame({'key1':['a','b','d'],'key2':['k','j','i'],'data2':range(3)})

In [6]: df7
Out[6]:
  key1 key2  data1
0    b    i      0
1    b    j      1
2    a    k      2
3    a    k      3
4    b    i      4
5    a    j      5
6    c    k      6

In [7]: df8
Out[7]:
  key1 key2  data2
0    a    k      0
1    b    j      1
2    d    i      2

In [8]: pd.merge(df7,df8,on=['key1','key2'])
Out[8]:
  key1 key2  data1  data2
0    b    j      1      1
1    a    k      2      0
2    a    k      3      0

left_on,right_on参数

分别指明左右两侧的连接键

In [11]: df3=pd.DataFrame({'l_key':['b','b','a','a','b','a','c'],'data1':range(7)})

In [12]: df4=pd.DataFrame({'r_key':['a','b','d'],'data2':range(3)})

In [13]: pd.merge(df3,df4,left_on='l_key',right_on='r_key')
Out[13]:
   data1 l_key  data2 r_key
0      0     b      1     b
1      1     b      1     b
2      4     b      1     b
3      2     a      0     a
4      3     a      0     a
5      5     a      0     a

how参数

outer连接

In [15]: df2=pd.DataFrame({'key':['a','b','d'],'data2':range(3)})

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

left( 或right)连接

只使用左边(或右边)中的DataFrame的键

In [17]: pd.merge(df1,df2,on='key',how='left')
Out[17]:
   data1 key  data2
0      0   b    1.0
1      1   b    1.0
2      2   a    0.0
3      3   a    0.0
4      4   b    1.0
5      5   a    0.0
6      6   c    NaN

In [18]: pd.merge(df1,df2,on='key',how='right')
Out[18]:
   data1 key  data2
0    0.0   b      1
1    1.0   b      1
2    4.0   b      1
3    2.0   a      0
4    3.0   a      0
5    5.0   a      0
6    NaN   d      2

left_index,right_index参数

进行索引上的合并

In [24]: df7=pd.DataFrame({'key':['a','b','a','a','b','c'],'value':range(6)})

In [25]: df8=pd.DataFrame({'group_val':[3.5,7]},index=['a','b'])

In [26]: df7
Out[26]:
  key  value
0   a      0
1   b      1
2   a      2
3   a      3
4   b      4
5   c      5

In [27]: df8
Out[27]:
   group_val
a        3.5
b        7.0

In [28]: pd.merge(df7,df8,left_on='key',right_index=True)
Out[28]:
  key  value  group_val
0   a      0        3.5
2   a      2        3.5
3   a      3        3.5
1   b      1        7.0
4   b      4        7.0

多对多的合并操作

产生的是行的笛卡尔积,由于左边的DataFrame有3个"b"行,右边的有两个,所以最终结果就有6个“b”行

In [19]: df5=pd.DataFrame({'key':['b','b','a','c','a','b'],'data1':range(6)})

In [20]: df6=pd.DataFrame({'key':['a','b','a','b','d'],'data2':range(5)})

In [21]: df5
Out[21]:
   data1 key
0      0   b
1      1   b
2      2   a
3      3   c
4      4   a
5      5   b

In [22]: df6
Out[22]:
   data2 key
0      0   a
1      1   b
2      2   a
3      3   b
4      4   d

In [23]: pd.merge(df5,df6,how='outer')
Out[23]:
    data1 key  data2
0     0.0   b    1.0
1     0.0   b    3.0
2     1.0   b    1.0
3     1.0   b    3.0
4     5.0   b    1.0
5     5.0   b    3.0
6     2.0   a    0.0
7     2.0   a    2.0
8     4.0   a    0.0
9     4.0   a    2.0
10    3.0   c    NaN
11    NaN   d    4.0

merge函数的参数

参数    说明
left    参与合并的左侧DataFrame
right    参与合并的右侧DataFrame
how    “inner”,“outer”,“left”,“right"其中之一,默认为"inner”
on    用于连接的列名,必须存在于左右两个DataFrame
left_on    左侧DataFrame中用作连接键的列
right_on    右侧DataFrame中用作连接键的列
left_index    将左侧的行索引用作其连接键
right_index    将右侧的行索引用作其连接键
sort    根据连接键对合并后的数据进行排列,默认为True
suffixes    字符串值元组,用于追加到重叠列名的末尾,默认为(’_x’,‘_y’)。如果左右两个DataFrame对象都有“data”,则结果就会出现“data_x”和“data_y”
copy    默认为True。如果设置为False,可以避免将数据复制到结果数据结构中
--------------------- 
作者:starter_zheng 
来源:CSDN 
原文:https://blog.csdn.net/starter_____/article/details/79198137 

fillna是pandas中的一个函数,用于填充DataFrame中的缺失值(NaN)。通过指定不同的方法,可以根据不同的需求来进行填充。在引用中的例子中,可以看到fillna函数的使用。具体而言,可以使用指定的方法来填充缺失值,比如使用常数、前向填充或后向填充等。例如,可以使用fillna(0)将缺失值填充为0,使用fillna(method='ffill')使用前向填充方法,使用fillna(method='bfill')使用后向填充方法。这样可以根据实际情况选择合适的填充方法来处理DataFrame中的缺失值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [解决pandas.DataFrame.fillna 填充Nan失败的问题](https://download.csdn.net/download/weixin_38610277/12866285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【机器学习杂烩pandas fillna()函数详解](https://blog.csdn.net/songyu8713162/article/details/87527410)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [pandas中的 fillna使用(pandas.DataFrame.fillna)](https://blog.csdn.net/conving/article/details/120205513)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值