熊猫的剪接、合并和拼接功能概述
pandas中数据的合并方案主要有concat,merge,join等函数。
其中concat主要是根据索引进行行或列的拼接,只能取行或列的交集或并集。
merge主要是根据共同列或者索引进行合并,可以取内连接,左连接、右连接、外连接等。
join的功能跟merge类似,因此不再赘述。
.dataframe tbody tr th:only-of-type { vertical-align: middle }
{ vertical-align: top }
.dataframe thead th { text-align: right }
.dataframe tbody tr th:only-of-type { vertical-align: middle }
{ vertical-align: top }
.dataframe thead th { text-align: right }
1. concat函数
axis :默认为0,为按行拼接;1 为按列拼接
ignore_index: 默认为False,会根据索引进行拼接;True 则会忽略原有索引,重建新索引
join: 为拼接方式,包括 inner,outer
sort: True 表示按索引排序
(1) 简单的按索引的行列拼接
# 按行拼接 pd.concat([df1,df2],sort=False).dataframe tbody tr th:only-of-type { vertical-align: middle }
{ vertical-align: top }
.dataframe thead th { text-align: right }
.dataframe tbody tr th:only-of-type { vertical-align: middle }
{ vertical-align: top }
.dataframe thead th { text-align: right }
(2)去掉原索引的拼接
# 按行拼接,去掉原来的行索引重新索引 pd.concat([df1,df2],sort=False,ignore_index=True).dataframe tbody tr th:only-of-type { vertical-align: middle }
{ vertical-align: top }
.dataframe thead th { text-align: right }
.dataframe tbody tr th:only-of-type { vertical-align: middle }
{ vertical-align: top }
.dataframe thead th { text-align: right }
(3)指定连接方式的拼接
拼接方式有 inner,outer
# 交集,inner join pd.concat([df1,df2],sort=False,join='inner').dataframe tbody tr th:only-of-type { vertical-align: middle }
{ vertical-align: top }
.dataframe thead th { text-align: right }
.dataframe tbody tr th:only-of-type { vertical-align: middle }
{ vertical-align: top }
.dataframe thead th { text-align: right }
2.merge函数
how:数据合并的方式。left:基于左dataframe列的数据合并;right:基于右dataframe列的数据合并;outer:基于列的数据外合并(取并集);inner:基于列的数据内合并(取交集);默认为'inner'。
on:基于相同列的合并
left_on/right_on:左/右dataframe合并的列名。
left_index/right_index:是否以index作为数据合并的列名,True表示是。可与left_on/right_on合并使用
sort:根据dataframe合并的keys排序,默认是。
suffixes:若有相同列且该列没有作为合并的列,可通过suffixes设置该列的后缀名,一般为元组和列表类型。
(1) 基于相同列的合并
df3 = pd.merge(df1,df2,how='inner',on='a') # 基于单列的合并 df4 = pd.merge(df1,df2,how='inner',on=['a','b']) # 基于多列的合并 df5 = pd.merge(df1,df2,how='left',on='a',suffixes=['_1','_2']) # 左连接,且指定后缀 df5.dataframe tbody tr th:only-of-type { vertical-align: middle }
{ vertical-align: top }
.dataframe thead th { text-align: right }
(2) 基于不同列名,或者列和索引,或者索引和索引间的合并
df6 = pd.merge(df1,df2,how='inner',left_on='a',right_on='b') # 基于不同列名 df7 = pd.merge(df1,df22,how='inner',left_on='a',right_index=True) #基于列和索引 df8 = pd.merge(df1,df2,how='inner',left_index=True,right_index=True) #基于两边都是索引 df8.dataframe tbody tr th:only-of-type { vertical-align: middle }
{ vertical-align: top }
.dataframe thead th { text-align: right }