Pandas中常用函数
目录
1、concat和merge都是用于合并数据的函数:
2 : Pandas 中的 apply() 和 map() 函数
1、concat和merge都是用于合并数据的函数:
(1) pd.concat()
- **用途**:主要用于沿轴(行或列)简单堆叠/连接多个DataFrame或Series
- **合并方式**:
- 默认沿行方向(axis=0)垂直堆叠
- 可以指定axis=1沿列方向水平拼接
- **特点**:
- 不基于键(key)匹配,只是简单拼接
- 可以同时合并多个DataFrame(两个及以上)
- 处理索引:可以选择保留原始索引或忽略(ignore_index=True)
- 适合结构相似的数据集(列相同或行相同)
# 垂直堆叠(行数增加)
pd.concat([df1, df2])
# 水平拼接(列数增加)
pd.concat([df1, df2], axis=1)
常见需求:使用Pandas合并两个Excel文件去除重复行,并保留新增行
import pandas as pd
df1 = pd.read_excel('./a9.xlsx')
df2 = pd.read_excel('./a9_1.xlsx')
# 或者如果你想基于特定列判断重复(例如'ID'列)
merged_df = pd.concat([df1, df2]).drop_duplicates(subset=['工单编号'])
# 将结果保存到新文件
merged_df.to_excel('new_rows_only.xlsx', index=False)
(2)pd.merge()
- **用途**:基于一个或多个键(key)执行数据库风格的合并(类似SQL的JOIN操作)
- **合并方式**:
- 需要指定连接键(on参数)
- 支持多种连接类型(how参数):inner、left、right、outer
- **特点**:
- 基于列值匹配
- 默认只合并两个DataFrame
- 可以处理不同列名的键(left_on/right_on)
- 适合关系型数据的关联合并
# 内连接(默认)
pd.merge(df1, df2, on='key') # 左连接
pd.merge(df1, df2, on='key', how='left') # 使用不同列名作为键
pd.merge(df1, df2, left_on='key1', right_on='key2')
(3) 关键区别总结:
| 特性 | `concat` | `merge` |
|---------------------|-------------------------------|------------------------------|
| **合并基础** | 按轴简单拼接 | 基于键值匹配 |
| **方向** | 垂直(行)或水平(列) | 总是水平合并(增加列) |
| **键匹配** | 不需要 | 必须指定 |
| **连接类型** | 只有简单拼接 | 支持inner/left/right/outer |
| **处理索引** | 可保留或重置 | 通常忽略索引 |
| **适用场景** | 相同结构数据的简单组合 | 关系型数据的关联合并 |
### 选择指南:
- 当需要**简单堆叠**数据(行或列方向)且**不需要键匹配**时 → 用`concat`
- 当需要**基于某些列的值关联**两个数据集时 → 用`merge`
### 可视化示例:
假设有两个DataFrame:
```
df1: df2:
A B A C
0 a1 b1 0 a1 c1
1 a2 b2 1 a3 c3
```
`concat`结果(垂直):
```
A B C
0 a1 b1 NaN
1 a2 b2 NaN
0 a1 NaN c1
1 a3 NaN c3
```
`merge`结果(on='A',内连接):
```
A B C
0 a1 b1 c1
```
2 : Pandas 中的 apply() 和 map() 函数
apply()函数
apply()函数主要用于对 DataFrame 或 Series 的每个行或列应用一个函数。它可以在整个DataFrame或Series上应用自定义函数,支持沿着指定轴(行或列)进行操作。例如,可以将一个函数应用于DataFrame的每一行或每一列:
- 基于Series的apply():可以对Series的每个元素应用一个函数。
- 基于DataFrame的apply():可以对DataFrame的每一行或每一列应用一个函数。通过设置参数
axis
,可以指定是沿着行(axis=1
)还是列(axis=0
)进行操作 - 。
map()函数
map()函数主要用于对 Series 中的每个元素进行映射或转换。它接受一个函数或字典,并将该函数应用于Series中的每个元素。如果使用字典,可以将元素映射到新的值;如果使用函数,则将该函数应用于每个元素。例如,可以将"N"映射为0,"T"映射为1:
- 使用字典映射:可以将Series中的值映射到新的值。例如,
data['D'] = data['D'].map({'N':0, 'T':1})
。 - 使用函数映射:可以定义一个函数,将该函数应用于每个元素。例如,
data['D'] = data['D'].map(lambda x: 1 if x == 'N' else 0)
12。
区别和适用场景
- 适用对象:
apply()
适用于DataFrame或Series,而map()
仅适用于Series。 - 功能差异:
apply()
可以应用于行或列,支持更复杂的操作;而map()
主要用于简单的元素级映射或转换。 - 性能考虑:在处理大量数据时,
apply()
可能比map()
更慢,因为apply()
需要遍历整个DataFrame或Series,而map()
仅处理单个Series的元素23。