pandas基础--缺失数据处理

一下代码的前提:import pandas as p

缺失数据是数据分析中的常见现象。pandas使用浮点值NaN(Not a Number)表示浮点和非浮点数组中的缺失数据。它只是一个便于被检测出来的标记而已。python内置的None值也会被当作NA处理。

 1 >>> string_data = pd.Series([‘aardvark‘, ‘artichoke‘, np.nan, ‘avocado‘])
 2 >>> string_data
 3 0     aardvark
 4 1    artichoke
 5 2          NaN
 6 3      avocado
 7 dtype: object
 8 >>> string_data.isnull()
 9 0    False
10 1    False
11 2     True
12 3    False
13 dtype: bool
14 >>> string_data[0] = None
15 >>> string_data.isnull()
16 0     True
17 1    False
18 2     True
19 3    False
20 dtype: bool
21 >>>

NA处理方法。


方式


说明


dropna


根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阈值调节对缺失值的容忍度


fillna


用指定值或插值方法(如ffill或bfill)填充缺失数据


isnull


返回一个含有布尔值的对象,这些布尔值表示哪些值是缺失值NA,该对象的类型和源类型一样


notnull


isnull的否定式

1.1 滤除缺失数据

过滤掉缺失数据的方法有多种,可通过dropna实现。

 1 >>> from numpy import nan as NA
 2 >>> data = pd.Series([1, NA, 3.5, NA, 7])
 3 >>> data.dropna()
 4 0    1.0
 5 2    3.5
 6 4    7.0
 7 dtype: float64
 8 >>> data[data.isnull()]
 9 1   NaN
10 3   NaN
11 dtype: float64
12 >>> data[data.notnull()]
13 0    1.0
14 2    3.5
15 4    7.0
16 dtype: float64

对于DataFrame,可能希望丢弃全NA或含有NA的行或列。

 1 >>> data = pd.DataFrame([[1, 1.6, 3], [1, NA, NA], [NA, NA, NA], [NA, 6.5, 3]])
 2 >>> data
 3      0    1    2
 4 0  1.0  1.6  3.0
 5 1  1.0  NaN  NaN
 6 2  NaN  NaN  NaN
 7 3  NaN  6.5  3.0
 8 >>>
 9 >>> cleaned = data.dropna()  #默认丢弃任何含有缺失值的行
10 >>> cleaned
11      0    1    2
12 0  1.0  1.6  3.0
13 >>> data.dropna(how=‘all‘)  #只丢弃全为NA的行
14      0    1    2
15 0  1.0  1.6  3.0
16 1  1.0  NaN  NaN
17 3  NaN  6.5  3.0
18 >>> data[4] = NA
19 >>> data
20      0    1    2   4
21 0  1.0  1.6  3.0 NaN
22 1  1.0  NaN  NaN NaN
23 2  NaN  NaN  NaN NaN
24 3  NaN  6.5  3.0 NaN
25 >>> data.dropna(axis=1, how=‘all‘)  #丢弃列
26      0    1    2
27 0  1.0  1.6  3.0
28 1  1.0  NaN  NaN
29 2  NaN  NaN  NaN
30 3  NaN  6.5  3.0
31 >>>

另一个滤除DataFrame行的问题涉及到时间序列数据。如果只想留下一部分观测数据,可以用thresh参数实现。

 1 >>> df = pd.DataFrame(np.random.randn(7, 3))
 2 >>> df
 3           0         1         2
 4 0  0.752301  1.360969 -0.474561
 5 1  0.466749  0.563536  1.978575
 6 2  0.223606  0.414722  0.094315
 7 3 -1.687511 -0.116227  0.442363
 8 4  0.705580 -0.131169 -0.868425
 9 5 -0.158964 -0.164512 -0.937150
10 6 -0.281537 -1.579942 -0.562886
11 >>> df.loc[:4, 1] = NA
12 >>> df.loc[:2, 2] = NA
13 >>> df
14           0         1         2
15 0  0.752301       NaN       NaN
16 1  0.466749       NaN       NaN
17 2  0.223606       NaN       NaN
18 3 -1.687511       NaN  0.442363
19 4  0.705580       NaN -0.868425
20 5 -0.158964 -0.164512 -0.937150
21 6 -0.281537 -1.579942 -0.562886
22 >>> df.dropna(thresh=3)
23           0         1         2
24 5 -0.158964 -0.164512 -0.937150
25 6 -0.281537 -1.579942 -0.562886
26 >>>

1.2  填充缺失数据

fillna方法可实现将缺失值替换为一个常数值。

 1 >>> df
 2           0         1         2
 3 0  0.752301       NaN       NaN
 4 1  0.466749       NaN       NaN
 5 2  0.223606       NaN       NaN
 6 3 -1.687511       NaN  0.442363
 7 4  0.705580       NaN -0.868425
 8 5 -0.158964 -0.164512 -0.937150
 9 6 -0.281537 -1.579942 -0.562886
10 >>> df.fillna(0)
11           0         1         2
12 0  0.752301  0.000000  0.000000
13 1  0.466749  0.000000  0.000000
14 2  0.223606  0.000000  0.000000
15 3 -1.687511  0.000000  0.442363
16 4  0.705580  0.000000 -0.868425
17 5 -0.158964 -0.164512 -0.937150
18 6 -0.281537 -1.579942 -0.562886
19 >>> df.fillna({1:0.5, 3:-1})  #第1列的NA替换为0.5,第3列的NA替换为-1
20           0         1         2
21 0  0.752301  0.500000       NaN
22 1  0.466749  0.500000       NaN
23 2  0.223606  0.500000       NaN
24 3 -1.687511  0.500000  0.442363
25 4  0.705580  0.500000 -0.868425
26 5 -0.158964 -0.164512 -0.937150
27 6 -0.281537 -1.579942 -0.562886
28 >>>

fillna默认会返回新对象。但也可以对现有对象进行就地修改。

 1 >>> _ = df.fillna(0, inplace=True)
 2 >>> df
 3           0         1         2
 4 0  0.752301  0.000000  0.000000
 5 1  0.466749  0.000000  0.000000
 6 2  0.223606  0.000000  0.000000
 7 3 -1.687511  0.000000  0.442363
 8 4  0.705580  0.000000 -0.868425
 9 5 -0.158964 -0.164512 -0.937150
10 6 -0.281537 -1.579942 -0.562886
11 >>>

对reindex有效的插值方法也可以用于fillna。

 1 >>> df = pd.DataFrame(np.random.randn(6, 3))
 2 >>> df.loc[2:, 1] = NA
 3 >>> df.loc[4:, 2] = NA
 4 >>> df
 5           0         1         2
 6 0 -1.433489  0.162951 -0.664600
 7 1  0.033722 -0.478252  0.480072
 8 2 -0.000977       NaN -1.555649
 9 3 -0.947501       NaN  0.089918
10 4  1.360481       NaN       NaN
11 5 -0.966030       NaN       NaN
12 >>> df.fillna(method=‘ffill‘)
13           0         1         2
14 0 -1.433489  0.162951 -0.664600
15 1  0.033722 -0.478252  0.480072
16 2 -0.000977 -0.478252 -1.555649
17 3 -0.947501 -0.478252  0.089918
18 4  1.360481 -0.478252  0.089918
19 5 -0.966030 -0.478252  0.089918
20 >>> df.fillna(method=‘ffill‘, limit=2)
21           0         1         2
22 0 -1.433489  0.162951 -0.664600
23 1  0.033722 -0.478252  0.480072
24 2 -0.000977 -0.478252 -1.555649
25 3 -0.947501 -0.478252  0.089918
26 4  1.360481       NaN  0.089918
27 5 -0.966030       NaN  0.089918

下表是fillna的参数参考。


参数


说明


value


用于填充缺失值的标量值或字典对象


method


插值方式,如果函数调用时未指定其他参数的话,默认为“ffill”


axis


带填充的轴,默认为axis=0


limit


(对于向前或先后填充)可以连续填充的最大数量

原文地址:https://www.cnblogs.com/mrlayfolk/p/12256474.html

时间: 2024-10-09 19:24:53

pandas基础--缺失数据处理的相关文章

Pandas | 17 缺失数据处理

数据丢失(缺失)在现实生活中总是一个问题. 机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题. 在这些领域,缺失值处理是使模型更加准确和有效的重点. 使用重构索引(reindexing),创建了一个缺少值的DataFrame. 在输出中,NaN表示不是数字的值. 一.检查缺失值 为了更容易地检测缺失值(以及跨越不同的数组dtype),Pandas提供了isnull()和notnull()函数,它们也是Series和DataFrame对象的方法  示例1

Pandas基础学习与Spark Python初探

摘要:pandas是一个强大的Python数据分析工具包,pandas的两个主要数据结构Series(一维)和DataFrame(二维)处理了金融,统计,社会中的绝大多数典型用例科学,以及许多工程领域.在Spark中,python程序可以方便修改,省去java和scala等的打包环节,如果需要导出文件,可以将数据转为pandas再保存到csv,excel等. 1.Pandas是什么? pandas是一个强大的Python数据分析工具包,是一个提供快速,灵活和表达性数据结构的python包,旨在使

【Python】pandas基础

pandas基础 pandas:主要进行数据清理和数据分析 1.pandas数据结构 1.1 Series 1.1.1 Series可以是一种一维数组型对象. 包含一个值序列,并且包含数据标签,称为索引(index). 创建Series 创建Series,不指定索引或指定索引 obj = pd.Series([1, 3, 5, 7]) obj = pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd']) 数据访问 Series对象有values和

python学习笔记(四):pandas基础

pandas 基础 serise import pandas as pd from pandas import Series, DataFrame obj = Series([4, -7, 5, 3]) obj 0 4 1 -7 2 5 3 3 dtype: int64 obj.values array([ 4, -7, 5, 3], dtype=int64) obj.index RangeIndex(start=0, stop=4, step=1) obj[[1,3]] # 跳着选取数据 1

pandas基础命令速查表

pandas基础命令速查表 数据的导入 数据的导出 创建测试对象 数据的查看与检查 数据的选取 数据的清洗 数据的过滤(filter)排序(sort)和分组(group) 数据的连接(join)与组合(combine) 一.数据的导入 pd.read_csv(filename) # 导入csv格式文件中的数据 pd.read_table(filename) # 导入有分隔符的文本 (如TSV) 中的数据 pd.read_excel(filename) # 导入Excel格式文件中的数据 pd.r

基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础

在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数据集. 所以可以是如下的 dictionary 的形式: web_stats = {'Day':[1,2,3,4,5,6], 'Visitors':[43,34,65,56,29,76], 'Bounce Rate':[65,67,78,65,45,52]} 我们可以通过如下方式把这个 dictio

python数据处理:pandas基础

本文资料来源: Python for Data Anylysis: Chapter 5 10 mintues to pandas: http://pandas.pydata.org/pandas-docs/stable/10min.html#min 1. Pandas简介 经过数年的发展,pandas已经成为python处理数据中最常被使用的package.以下是开发pandas最开始的目的,也是现在pandas最常用的功能 a: Data structures with labeled axe

pandas基础(3)_数据处理

1:删除重复数据 使用duplicate()函数检测重复的行,返回元素为bool类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为true >>> df =DataFrame(np.random.randint(0,150,size=(6,3)),columns=['Chinese','maths','Chinese'],index=['zhangsan','lisi','wangwu','lisi','xiaowu','zhangsan']) >>&

第十二节:pandas缺失数据处理

1.isnull():检查是否含有确实数据 2.fillna():填充缺失数据 3.dropna() :删除缺失值 4.replace():替换值 原文地址:https://www.cnblogs.com/zhaco/p/10323716.html