值连接
import pandas as pd
df1 = pd.DataFrame({'Name':['zhangsan','lisi']
,'Age':[20,30]})
df2 = pd.DataFrame({'Name':['lisi','wangwu']
,'Gender':['F','M']})
df1.merge(df2,on = 'Name',how = 'left')
| Name | Age | Gender |
---|
0 | zhangsan | 20 | NaN |
---|
1 | lisi | 30 | F |
---|
df1 = pd.DataFrame({'df1_name':['zhangsan','lisi']
,'Age':[20,30]})
df2 = pd.DataFrame({'df2_name':['lisi','wangwu']
,'Gender':['F','M']})
df1.merge(df2,left_on = 'df1_name',right_on = 'df2_name',how = 'left')
| df1_name | Age | df2_name | Gender |
---|
0 | zhangsan | 20 | NaN | NaN |
---|
1 | lisi | 30 | lisi | F |
---|
df_1 = pd.DataFrame({'Name':['zhangsan'],'Grade':[70]})
df_1
df_2 = pd.DataFrame({'Name':['zhangsan'],'Grade':[80]})
df_2
df1.merge(df2, on='Name',how='left',suffixes=['_Chinese','_Math'])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-5-8731a9946c66> in <module>
----> 1 df1.merge(df2, on='Name',how='left',suffixes=['_Chinese','_Math'])
D:\anaconda\lib\site-packages\pandas\core\frame.py in merge(self, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
7961 copy=copy,
7962 indicator=indicator,
-> 7963 validate=validate,
7964 )
7965
D:\anaconda\lib\site-packages\pandas\core\reshape\merge.py in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
85 copy=copy,
86 indicator=indicator,
---> 87 validate=validate,
88 )
89 return op.get_result()
D:\anaconda\lib\site-packages\pandas\core\reshape\merge.py in __init__(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, copy, indicator, validate)
650 self.right_join_keys,
651 self.join_names,
--> 652 ) = self._get_merge_keys()
653
654 # validate the merge keys dtypes. We may need to coerce
D:\anaconda\lib\site-packages\pandas\core\reshape\merge.py in _get_merge_keys(self)
1003 if not is_rkey(rk):
1004 if rk is not None:
-> 1005 right_keys.append(right._get_label_or_level_values(rk))
1006 else:
1007 # work-around for merge_asof(right_index=True)
D:\anaconda\lib\site-packages\pandas\core\generic.py in _get_label_or_level_values(self, key, axis)
1561 values = self.axes[axis].get_level_values(key)._values
1562 else:
-> 1563 raise KeyError(key)
1564
1565 # Check for duplicates
KeyError: 'Name'
方向连接
df1 = pd.DataFrame({'Name':['zhangsan','lisi'],
'Age':[20,30]})
df2 = pd.DataFrame({'Name':['wangwu'],'Age':[40]})
pd.concat([df1,df2])
| Name | Age |
---|
0 | zhangsan | 20 |
---|
1 | lisi | 30 |
---|
0 | wangwu | 40 |
---|
df2 = pd.DataFrame({'Grade':[80,90]})
df3 = pd.DataFrame({'Gender':['M','F']})
pd.concat([df1,df2,df3],1)
| Name | Age | Grade | Gender |
---|
0 | zhangsan | 20 | 80 | M |
---|
1 | lisi | 30 | 90 | F |
---|
类连接操作
df1 = pd.DataFrame({'Name':['zhangsan','lisi','wangwu'],
'Age':[20,21,21],
'Class':['one','two','three']})
df2 = pd.DataFrame({'Name':['zhangsan','lisi','wangwu'],
'Age':[20,21,21],
'Class':['one','two','three']})
df1.compare(df2)