当前位置: 首页 > news >正文

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。
http://www.xdnf.cn/news/938989.html

相关文章:

  • 2025年- H78-Lc186--763.划分字符串区间(贪心)--Java版
  • 分类数据集 - 场景分类数据集下载
  • Langchian - 实现文本分类实际应用
  • 【Java学习笔记】System类
  • vite ts 配置使用@ 允许js
  • 基于SpringBoot实现的大创管理系统设计与实现【源码+文档】
  • 「Java基本语法」标识符、关键字与常量
  • Java编程之组合模式
  • Python项目的构建和部署方案推荐
  • remote display server is not supported (e.g. Wayland)
  • CentOS-7 通过 NFS 实现服务器之间的文件共享
  • 深入了解NIO的优化实现原理
  • 二叉树-226.翻转链表-力扣(LeetCode)
  • Python学习(7) ----- Python起源
  • cookie session和token的区别
  • 突破同步训练瓶颈!AReaL如何实现大规模异步强化学习系统的高效语言推理?
  • 树的基本概念与操作:构建数据结构的层级世界
  • leetcode2368. 受限条件下可到达节点的数目-medium
  • JDK8新特性之Steam流
  • 手动实现C#ArrayList容器
  • Boost ASIO 库深入学习(2)
  • Redis持久化策略:RDB与AOF详解
  • shell脚本 --案例实操
  • cognee,有望替代 RAG, 简单了解一下
  • 服务网格技术深度解析:Istio vs Linkerd的选型对比
  • 【Self-Ask with Search Agent机制概述】利用TavilyAnswer实现搜索代理
  • 【文件传输脚本】
  • XSS攻击防御全指南:核心防护技巧
  • UVM的断言assert详谈
  • 【GESP真题解析】第 17 集 GESP 三级 2024 年 12 月编程题 2:打印数字