Python数据分析 | (22) 处理缺失数据

在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载、清 理、转换以及重塑。这些工作会占到分析师时间的80%或更多。有时,存储 在文件和数据库中的数据的格式不适合某个特定的任务。许多研究者都选择 使用通用编程语言(如Python、Perl、R或Java)或UNIX文本处理工具(如sed或awk)对数据格式进行专门处理。幸运的是,pandas和内置的Python标准库提供了一组高级的、灵活的、快速的工具,可以让你轻松地将数据规 整为想要的格式。

如果你发现了一种本书或pandas库中没有的数据操作方式,请在邮件列表或GitHub网站上提出。实际上,pandas的许多设计和实现都是由真实应用的需 求所驱动的。

在接下来的4篇博客中,我会讨论处理缺失数据、重复数据、字符串操作和其它分析数据转换的工具。之后,我们会关注于用多种方法合并、重塑数据集。

目录

1. 缺失数据

2. 滤除缺失数据

3. 填充缺失数据


1. 缺失数据

在许多数据分析工作中,缺失数据是经常发生的。pandas的目标之一就是尽 量轻松地处理缺失数据。例如,pandas对象的所有描述性统计默认都不包括 缺失数据。

缺失数据在pandas中呈现的方式有些不完美,但对于大多数用户可以保证功 能正常。对于数值数据,pandas使用浮点值NaN(Not a Number)表示缺失 数据。我们称其为哨兵值,可以方便的检测出来:

import numpy as np
import pandas as pd
PREVIOUS_MAX_ROWS = pd.options.display.max_rows
pd.options.display.max_rows = 20
np.random.seed(12345)
import matplotlib.pyplot as plt
plt.rc('figure', figsize=(10, 6))
np.set_printoptions(precision=4, suppress=True)
string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])
print(string_data)
string_data.isnull()

在pandas中,我们采用了R语言中的惯用法,即将缺失值表示为NA,它表示 不可用not available。在统计应用中,NA数据可能是不存在的数据或者虽然 存在,但是没有观察到(例如,数据采集中发生了问题)。当进行数据清洗 以进行分析时,最好直接对缺失数据进行分析,以判断数据采集的问题或缺 失数据可能导致的偏差。

Python内置的None值在对象数组中也可以作为NA:

string_data[0] = None
string_data.isnull()

pandas项目中还在不断优化内部细节以更好处理缺失数据,像用户API功 能,例如pandas.isnull,去除了许多恼人的细节。下表列出了一些关于缺失 数据处理的函数。

 

2. 滤除缺失数据

过滤掉缺失数据的办法有很多种。你可以通过pandas.isnull或布尔索引的手 工方法,但dropna可能会更实用一些。对于一个Series,dropna返回一个仅 含非空数据和索引值的Series:

from numpy import nan as NA
data = pd.Series([1, NA, 3.5, NA, 7])
data.dropna()

data[data.notnull()]

而对于DataFrame对象,事情就有点复杂了。你可能希望丢弃全NA或含有NA的行或列。dropna默认丢弃任何含有缺失值的行:

data = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA],
                     [NA, NA, NA], [NA, 6.5, 3.]])
cleaned = data.dropna()
print(data)
print("------")
print(cleaned)

传入how='all'将只丢弃全为NA的那些行:

data.dropna(how='all')

用这种方式丢弃列,只需传入axis=1即可:

data[4] = NA
print(data)
data.dropna(axis=1, how='all')

另一个滤除DataFrame行的问题涉及时间序列数据。假设你只想留下一部分 观测数据,可以用thresh参数实现此目的:

df = pd.DataFrame(np.random.randn(7, 3))
df.iloc[:4, 1] = NA
df.iloc[:2, 2] = NA
print(df)
print(df.dropna())
df.dropna(thresh=2)#去除包含两个nan的行

3. 填充缺失数据

你可能不想滤除缺失数据(有可能会丢弃跟它有关的其他数据),而是希望 通过其他方式填补那些“空洞”。对于大多数情况而言,fillna方法是最主要的 函数。通过一个常数调用fillna就会将缺失值替换为那个常数值:

print(df)
df.fillna(0)

若是通过一个字典调用fillna,就可以实现对不同的列填充不同的值:

df.fillna({1: 0.5, 2: 0})

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

_ = df.fillna(0, inplace=True)
df

对reindexing有效的那些插值方法也可用于fillna:

df = pd.DataFrame(np.random.randn(6, 3))
df.iloc[2:, 1] = NA
df.iloc[4:, 2] = NA
print(df)
print(df.fillna(method='ffill')) #ffill对缺失值填充为它前面的值
print(df.fillna(method='ffill', limit=2)) #限制最大填充数量为2

只要有些创新,你就可以利用fillna实现许多别的功能。比如说,你可以传入Series的平均值或中位数:

data = pd.Series([1., NA, 3.5, NA, 7])
data.fillna(data.mean())

下表列出了fillna的参考:

 

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很高兴回答你的问题!Python数据分析是一种重要的数据科学工具,可以让你从数据中发现有意义的信息。Python有许多数据分析库,包括pandas、numpy、matplotlib等等,它们都可以帮助你更好地理解数据。你可以使用这些库来清洗和准备数据、执行数据分析和可视化、以及构建机器学习模型等等。如果你想深入了解Python数据分析,建议学习一些数据科学的基础知识,比如数据结构、统计学、概率论等等。 ### 回答2: Python数据分析是一种使用Python编程语言来处理、清洗、分析和可视化数据的技术或方法。Python拥有丰富的库和工具,使得进行数据分析变得相对简单和高效。以下是关于Python数据分析的一些重要内容和特点: 1. 数据处理Python数据分析工具提供了处理大规模数据集的能力。例如,使用NumPy和Pandas库可以进行数据结构操作、数据过滤和转换,以及缺失值的处理。 2. 数据可视化:Python的Matplotlib和Seaborn等库提供了强大的绘图功能,可以创建各种静态和动态的图表,有助于更好地理解数据和发现数据之间的模式和关联。 3. 机器学习:Python拥有许多强大的机器学习库,如Scikit-learn和TensorFlow,使得应用各种机器学习算法和模型变得更加容易。这些库提供了许多经典的机器学习算法和模型,如线性回归、决策树、支持向量机等。 4. 数据挖掘:Python还提供了一些用于数据挖掘的库,如NLTK(自然语言处理工具包)和BeautifulSoup(用于解析HTML和XML文档)。这些库可以帮助提取和处理文本数据,进行文本分析和情感分析等任务。 5. 大数据:随着大数据技术的发展,Python也逐渐融入到大数据处理和分析领域。例如,PySpark是一个使用Python开发的大数据处理框架,可以运行在Apache Spark上,支持高效的并行计算和分布式数据处理。 总之,Python数据分析是一种功能强大、灵活且易于上手的数据分析方法。它提供了丰富的库和工具,可以处理各种类型的数据,并使用机器学习和数据挖掘技术进行高级分析和预测。无论是在学术研究、商业决策还是其他领域,Python数据分析都是一项不可或缺的技能。 ### 回答3: Python数据分析是利用Python语言进行数据处理、清洗、分析和可视化的过程。Python作为一种简洁、易学的编程语言,具备强大的数据分析能力,能够有效地处理和探索大量的数据Python数据分析的基础是使用各种数据处理库,如NumPy、Pandas和SciPy等。NumPy是Python中常用的数值计算库,提供了大量的数值运算函数和数据结构,能够高效地进行向量化计算。Pandas是数据分析中最常用的库之一,提供了DataFrame数据结构,可以方便地处理结构化数据,进行数据清洗、过滤和聚合等操作。SciPy库则提供了一系列科学计算和统计分析功能,包括概率分布、假设检验和回归分析等。 除了基础库之外,Python还有一些专门用于数据分析的库,例如Matplotlib和Seaborn用于数据可视化,可以绘制各种图表和图形,方便展示和分析数据。此外,还有Scikit-learn用于机器学习,可以进行分类、聚类和回归等任务,以及StatsModels用于统计模型拟合和推断等。 Python数据分析的优势在于其丰富的库和工具生态系统、易于学习和使用、跨平台性强,并且有大量的社区支持和文档资源。Python还可以和其他语言(如R语言和SQL)配合使用,扩展数据分析的能力。 总的来说,Python数据分析是一种强大的数据处理工具,能够帮助人们从大量的数据中提取有价值的信息,并支持决策和预测。无论是在科学研究、商业分析还是数据挖掘等方面,Python数据分析都扮演着重要的角色。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值