- Python pandas教程
- Python Pandas - 主页
- Python Pandas - 简介
- Python Pandas - 环境设置
- 数据结构简介
- Python pandas - 系列
- Python Pandas - 数据帧
- Python Pandas - 面板
- Python Pandas - 基本功能
- 描述性统计
- 功能应用
- Python Pandas - 重新索引
- Python Pandas - 迭代
- Python Pandas - 排序
- 处理文本数据
- 选项和定制
- 索引和选择数据
- 统计功能
- Python Pandas - 窗口函数
- Python Pandas - 聚合
- Python Pandas - 缺失数据
- Python Pandas - GroupBy
- Python Pandas - 合并/连接
- Python Pandas - 连接
- Python Pandas - 日期功能
- Python Pandas - Timedelta
- Python Pandas - 分类数据
- Python Pandas - 可视化
- Python Pandas - IO 工具
- Python Pandas - 稀疏数据
- Python Pandas - 注意事项和陷阱
- 与SQL的比较
- Python Pandas 有用资源
- Python Pandas - 快速指南
- Python Pandas - 有用的资源
- Python Pandas - 讨论
Python Pandas - 缺失数据
缺失数据始终是现实生活场景中的一个问题。由于缺失值导致数据质量差,机器学习和数据挖掘等领域在模型预测的准确性方面面临严重问题。在这些领域,缺失值处理是使模型更加准确和有效的主要关注点。
数据何时以及为何丢失?
让我们考虑一项产品的在线调查。很多时候,人们不会分享与他们相关的所有信息。很少有人分享他们的经验,但很少有人分享他们使用该产品的时间;很少有人分享他们使用该产品的时间、体验,但不分享他们的联系信息。因此,以某种方式,一部分数据总是丢失,这在实时情况下很常见。
现在让我们看看如何使用 Pandas 处理缺失值(例如 NA 或 NaN)。
# import the pandas library import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df
其输出如下 -
one two three a 0.077988 0.476149 0.965836 b NaN NaN NaN c -0.390208 -0.551605 -2.301950 d NaN NaN NaN e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g NaN NaN NaN h 0.085100 0.532791 0.887415
使用重新索引,我们创建了一个包含缺失值的 DataFrame。在输出中,NaN表示不是数字。
检查缺失值
为了更轻松地检测缺失值(并且跨不同的数组数据类型),Pandas 提供了isnull()和notnull()函数,它们也是 Series 和 DataFrame 对象上的方法 -
实施例1
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df['one'].isnull()
其输出如下 -
a False b True c False d True e False f False g True h False Name: one, dtype: bool
实施例2
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df['one'].notnull()
其输出如下 -
a True b False c True d False e True f True g False h True Name: one, dtype: bool
缺失数据的计算
- 对数据求和时,NA 将被视为零
- 如果数据全部为 NA,则结果将为 NA
实施例1
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df['one'].sum()
其输出如下 -
2.02357685917
实施例2
import pandas as pd import numpy as np df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two']) print df['one'].sum()
其输出如下 -
nan
清理/填充缺失数据
Pandas 提供了各种清理缺失值的方法。fillna 函数可以通过多种方式用非空数据“填充”NA 值,我们将在以下各节中对此进行说明。
用标量值替换 NaN
以下程序显示如何将“NaN”替换为“0”。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c']) print df print ("NaN replaced with '0':") print df.fillna(0)
其输出如下 -
one two three a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN replaced with '0': one two three a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580
在这里,我们用零填充;相反,我们也可以填充任何其他值。
向前和向后填充 NA
使用重新索引章节中讨论的填充概念,我们将填充缺失值。
先生编号 | 方法与行动 |
---|---|
1 |
垫/填充 填写方式 转发 |
2 |
填土/回填 填充方法 向后 |
实施例1
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df.fillna(method='pad')
其输出如下 -
one two three a 0.077988 0.476149 0.965836 b 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 d -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
实施例2
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df.fillna(method='backfill')
其输出如下 -
one two three a 0.077988 0.476149 0.965836 b -0.390208 -0.551605 -2.301950 c -0.390208 -0.551605 -2.301950 d -2.000303 -0.788201 1.510072 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g 0.085100 0.532791 0.887415 h 0.085100 0.532791 0.887415
删除缺失值
如果您想简单地排除缺失值,请使用dropna函数和axis参数。默认情况下,axis=0,即沿行,这意味着如果行内的任何值为 NA,则排除整行。
实施例1
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df.dropna()
其输出如下 -
one two three a 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
实施例2
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df.dropna(axis=1)
其输出如下 -
Empty DataFrame Columns: [ ] Index: [a, b, c, d, e, f, g, h]
替换缺失(或)的通用值
很多时候,我们必须用一些特定值替换通用值。我们可以通过应用替换方法来实现这一点。
用标量值替换 NA 与fillna()函数的Behave等效。
实施例1
import pandas as pd import numpy as np df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}) print df.replace({1000:10,2000:60})
其输出如下 -
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60
实施例2
import pandas as pd import numpy as np df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}) print df.replace({1000:10,2000:60})
其输出如下 -
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60