@[toc]
1.合并
1.1 结构合并
将两个结构相同的数据合并
1.1.1 concat函数
- 
函数配置
concat([dataFrame1, dataFrame2,…], index_ingore=False)参数说明:index_ingore=False(表示合并的索引不延续),index_ingore=True(表示合并的索引可延续)
 - 实例
import pandas as pd import numpy as np 
创建一个十行两列的二维数据
df = pd.DataFrame(np.random.randint(0, 10, (3, 2)), columns=['A', 'B'])
将数据拆分成两份,并保存在列表中
data_list = [df[0:2], df[3:]]
索引值不延续
df1 = pd.concat(data_list, ignore_index=False)
索引值延续
df2 = pd.concat(data_list, ignore_index=True)
* 返回结果
```python
----------------df--------------------------
   A  B
0  7  8
1  7  3
2  5  9
3  4  0
4  1  8
----------------df1--------------------------
   A  B
0  7  8
1  7  3
3  4  0# -------------->这里并没有2出现,索引不连续
4  1  8
----------------df2--------------------------
   A  B
0  7  8
1  7  3
2  4  0
3  1  8
1.1.2 append函数
- 
函数配置
df.append(df1, index_ignore=True)参数说明:index_ingore=False(表示索引不延续),index_ingore=True(表示索引延续)
 - 实例
import pandas as pd import numpy as np 
创建一个五行两列的二维数组
df = pd.DataFrame(np.random.randint(0, 10, (5, 2)), columns=['A', 'B'])
创建要追加的数据
narry = np.random.randint(0, 10, (3, 2))
data_list = pd.DataFrame(narry, columns=['A', 'B'])
合并数据
df1 = df.append(data_list, ignore_index=True)
* 返回结果
```python
----------------df--------------------------
   A  B
0  5  6
1  1  2
2  5  3
3  1  8
4  1  2
----------------df1--------------------------
   A  B
0  5  6
1  1  2
2  5  3
3  1  8
4  1  2
5  8  1
6  3  5
7  1  1
1.2 字段合并
将同一个数据不同列合并
- 参数配置
pd.merge( left, right, how="inner", on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=("_x", "_y"), copy=True, indicator=False, validate=None, ) - 参数说明
 
| 参数 | 说明 | 
|---|---|
| how | 连接方式:inner、left、right、outer,默认为 inner | 
| on | 用于连接的列名 | 
| left_on | 左表用于连接的列名 | 
| right_on | 右表用于连接的列名 | 
| Left_index | 是否使用左表的行索引作为连接键,默认为False | 
| Right_index | 是否使用右表的行索引作为连接键,默认为False | 
| sort | 默认为False,将合并的数据进行排序 | 
| copy | 默认为True。总是将数据复制到数据结构中,设置为False可以提高性能 | 
| suffixes | 存在相同列名时在列名后面添加的后缀,默认为(’_x’, ‘_y') | 
| indicator | 显示合并数据中数据来自哪个表 | 
- 实例1
import pandas as pd 
df1 = pd.DataFrame({'key':['a','b','c'], 'data1':range(3)})
df2 = pd.DataFrame({'key':['a','b','c'], 'data2':range(3)})
df = pd.merge(df1, df2) # 合并时默认以重复列并作为合并依据
* 结果展示
```python
----------------df1--------------------------
  key  data1
0   a      0
1   b      1
2   c      2
----------------df2--------------------------
  key  data2
0   a      0
1   b      1
2   c      2
----------------df---------------------------
  key  data1  data2
0   a      0      0
1   b      1      1
2   c      2      2
- 实例2
# 多键连接时将连接键组成列表传入 
right=DataFrame({'key1':['foo','foo','bar','bar'],  
'key2':['one','one','one','two'],  
'lval':[4,5,6,7]})  
left=DataFrame({'key1':['foo','foo','bar'],  
'key2':['one','two','one'],  
'lval':[1,2,3]})  
pd.merge(left,right,on=['key1','key2'],how='outer')
* 结果展示
```python
----------------right-------------------------
  key1 key2  lval
0  foo  one     4
1  foo  one     5
2  bar  one     6
3  bar  two     7
----------------left--------------------------
  key1 key2  lval
0  foo  one     1
1  foo  two     2
2  bar  one     3
----------------df---------------------------
  key1 key2  lval_x  lval_y
0  foo  one     1.0     4.0
1  foo  one     1.0     5.0
2  foo  two     2.0     NaN
3  bar  one     3.0     6.0
4  bar  two     NaN     7.0
2.去重
- 参数配置
data.drop_duplicates(subset=['A','B'],keep='first',inplace=True) - 参数说明
 
| 参数 | 说明 | 
|---|---|
| subset | 列名,可选,默认为None | 
| keep | {‘first’, ‘last’, False}, 默认值 ‘first’ | 
| first | 保留第一次出现的重复行,删除后面的重复行 | 
| last | 删除重复项,除了最后一次出现 | 
| False | 删除所有重复项 | 
| inplace | 布尔值,默认为False,是否直接在原数据上删除重复项或删除重复项后返回副本。(inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。) | 
- 实例
- 去除完全重复的行数据
data.drop_duplicates(inplace=True)
df = pd.DataFrame({ 'brand': ['Yum Yum', 'Yum Yum', 'Indomie', 'Indomie', 'Indomie'], 'style': ['cup', 'cup', 'cup', 'pack', 'pack'], 'rating': [4, 4, 3.5, 15, 5] }) 
 - 去除完全重复的行数据
 
df.drop_duplicates()
结果展示
```python
---------------去重前的df---------------------------
brand style rating
0 Yum Yum cup 4.0
1 Yum Yum cup 4.0
2 Indomie cup 3.5
3 Indomie pack 15.0
4 Indomie pack 5.0
---------------去重后的df---------------------------
brand style rating
0 Yum Yum cup 4.0
2 Indomie cup 3.5
3 Indomie pack 15.0
4 Indomie pack 5.0
- 
使用subset 去除某几列重复的行数据
data.drop_duplicates(subset=['A','B'],keep='first',inplace=True)
df.drop_duplicates(subset=['brand'])结果展示
brand style rating 0 Yum Yum cup 4.0 2 Indomie cup 3.5 - 
使用 keep删除重复项并保留最后一次出现
df.drop_duplicates(subset=['brand', 'style'], keep='last')- 结果展示
brand style rating 1 Yum Yum cup 4.0 2 Indomie cup 3.5 4 Indomie pack 5.0参考链接
 
 - 结果展示
 - Pandas: 数据合并
 - drop_duplicates去重详解
 - Pandas之drop_duplicates:去除重复项
 










