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

Pandas缺失值处理

 

目录

 1、丢失数据

 2、缺失值处理

 3、重复值处理

 4、字符串函数

4.1 向量化字符串操作简介

 4.2 str方法简介


1、丢失数据

数据丢失(缺失)在显示生活中是一个常见的问题,假设有一个产品的在线调查,很多时候,人们不会分享与他们有关的所有信息,有人会分析使用产品的时间、经验,但不是他们的个人信息,因此,以某种方式或其他方式,总会有一部分数据总是丢失,这是非常常见的现象

**检查缺失值**

| 方法      | 说明                   |
| --------- | ---------------------- |
| isnull()  | 是否有缺失值           |
| notnull() | 数据不是缺失值返回True |

- 在进行数据计算时, 缺失值NaN视为0或不存在

```python
df = pd.DataFrame({'d1':[1, 2, 3, 4],
                   'd2':[4, np.nan, 6, 11],
                   'd3':[7, 8, 9, np.nan],
                   'd4':[np.nan, np.nan, np.nan, np.nan]
                   })

print(df)
print(df['d2'].sum())
print(df['d2'].mean())  # 平均值计算不包含
```

```python
   d1    d2   d3  d4
0   1   4.0  7.0 NaN
1   3   NaN  8.0 NaN
2   9   6.0  9.0 NaN
3   1  11.0  NaN NaN

21.0

7.0
```

- 如果数据全部是NaN, 那么结果为0/NaN

```
print(df['d4'].sum())
print(df['d4'].mean())
```

```
0.0
nan
```

 2、缺失值处理

**过滤缺失值**

方法:dropna()函数

- 默认情况下,axis=0,即在行上应用,意味着如果行内有任何值是NA,那么整行被排除

```python
dropna(axis=0, how='any')
```

| 参数 | 说明                                                         |
| ---- | ------------------------------------------------------------ |
| axis | 控制行列删除,默认0为行 1为列                                |
| how  | 控制删除的个数, all->只要有缺失值就过滤   any->只过滤一整行为缺失值的行 |

### **补全缺失值**

方法:fillna()函数

- 使用数据补全替换

```python
fillna(method='pad',axis=0)
```

| method参数值   | 说明               |
| -------------- | ------------------ |
| pad/fill       | 根据前面的数据填充 |
| bfill/backfill | 根据后面的数据填充 |

- **replace()函数-替换**

很多时候,必须用一些具体的值取代一个通用的值,可以通过应用替换实现这一点

```python
# 使用replace替换
print(df.replace({np.nan: 10}))
```

 3、重复值处理

当我们使用pandas处理数据的时候,经常会遇到数据重复的问题,如何找出重复数据进而分析重复原因,或者如何直接删除重复的数据是一个关键的步骤,pandas提供了很方便的方法:duplicated()和drop_duplicates()

- **duplicated**()

```
DataFrame.duplicated(subset=None, keep=‘first’)
```

subset:默认为None,指定列名判断重复值

- keep:默认为‘first’,如何标记重复标签
  - first:将除第一次出现以外的重复数据标记为True
  - last:将除最后一次出现以外的重复数据标记为True
  - False:将所有重复的项都标记为True(不管是不是第一次出现)

- **drop_duplicates()**

```
DataFrame.drop_duplicates(subset=None, keep=‘first’, inplace=False)
```

subset:与duplicated()中相同

keep:与duplicated()中相同

inplace:是是否修改在原数据上

 4、字符串函数

- 当我们遇到一个超级大的 DataFrame,里面有一列类型为字符串,要将每一行的字符串都用同一方式进行处理, 一般会想到遍历整合 DataFrame。

4.1 向量化字符串操作简介

- 量化操作简化了纯数值的数组操作语法,我们不需要再担心数组的长度或维度,只需要把中心放在操作上面。
- 而对字符串的向量化需要工具包的支持,如 Numpy 就没办法直接对字符串进行向量化操作,只能通过繁琐的循环来实现。 Pandas 则可以很好的处理这类问题

 4.2 str方法简介

- Python 会处理字符串起来会很容易,作为工具包的 Pandas 同样可以简单快速的处理字符串,几乎把 Python 内置的字符串方法都给复制过来了,这种方法就是 Pandas 内置的 str 方法。
- 通俗来说就可以将 series 和 index 对象中包含字符串的部分简单看作单个字符串处理,达到批量简单快速处理的目的,str 方法有如下函数可供我们使用。

| 函数                | 含义                                                         |
| ------------------- | ------------------------------------------------------------ |
| lower()             | 将的字符串转换为小写                                         |
| upper()             | 将的字符串转换为大写                                         |
| len()               | 得出字符串的长度                                             |
| strip()             | 去除字符串两边的空格(包含换行符)                           |
| split()             | 用指定的分割符分割字符串                                     |
| cat(sep=“”)         | 用给定的分隔符连接字符串元素                                 |
| contains(pattern)   | 如果子字符串包含在元素中,则为每个元素返回一个布尔值 True,否则为 False |
| replace(a,b)        | 将值 a 替换为值 b                                            |
| count(pattern)      | 返回每个字符串元素出现的次数                                 |
| startswith(pattern) | 如果 Series 中的元素以指定的字符串开头,则返回 True          |
| endswith(pattern)   | 如果 Series 中的元素以指定的字符串结尾,则返回 True          |
| findall(pattern)    | 以列表的形式返出现的字符串                                   |
| find(pattern)       | 返回字符串第一次出现的索引位置                               |


http://www.mrgr.cn/news/28041.html

相关文章:

  • linux下编译安装memcached
  • PyQt入门指南六十 与Python其他库的集成方法
  • HTML5实现俄罗斯方块小游戏
  • R语言贝叶斯分析:INLA 、MCMC混合模型、生存分析肿瘤临床试验、间歇泉喷发时间数据应用|附数据代码...
  • 《动手学深度学习》中d2l库的安装以及问题解决
  • 计算机网络学习笔记-3.3以太网和局域网
  • Dina靶机详解
  • JDBC注册驱动及获取连接
  • 【字幕】恋上数据结构与算法之015动态数组03简单接口的实现
  • TikTok商家如何通过真人测评提高流量和销量?
  • C++之AVL树
  • VUE3初学者必备的快速开发入门指南
  • 系统架构设计师教程 第5章 5.6 基于构件的软件工程 笔记
  • Dubbo从入门到实战
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • 嵌入式通信原理—SPI总线通信原理与应用
  • 2024中国算力大会 2024 China Computational Power Conference
  • GB28181在融合指挥调度系统应用方案探究和技术实现
  • 解决跨境电商平台账号无法访问的常见问题
  • springboot老年康复中心—计算机毕业设计源码27406
  • FreeRTOS实战指南 — 3.1 C语言链表
  • 斗破C++编程入门系列之二十七:数组、指针和字符串:string类(一星斗师)
  • 【C++】unordered系列
  • MongoDB的详细安装教程
  • string类的模拟实现
  • 【AI大模型】ChatGPT模型原理介绍(下)