《Python数据科学指南》——1.21 对列进行预处理

简介:

本节书摘来自异步社区《Python数据科学指南》一书中的第1章,第1.21节,作者[印度] Gopi Subramanian ,方延风 刘丹 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.21 对列进行预处理

我们获取的数据经常并不是我们能直接使用的格式。我们需要执行一系列在机器学习术语中称为数据预处理的数据处理过程。克服这个障碍的一条途径是采用字符串的形式获取所有数据,在后续的场景里再执行需要的数据格式转换。还有一种办法是在数据源阶段就完成这些转换工作。genfromtxt提供了一些函数,让我们可以在读取数据源的时候执行数据转换。

1.21.1 准备工作

假定我们有如下的文本行。

30kg,inr2000,31.11,56.33,1
52kg,inr8000.35,12,16.7,2

这是一个我们获取到的生活中的常见数据样例,开头的两个列里,分别有字符串“kg”和“inr”在真正的数据的后面和前面。

我们来试试如下方法将数据放入NumPy数组中。

in_data = StringIO("30kg,inr2000,31.11,56.33,1\
n52kg,inr8000.35,12,16.7,2")
data = np.genfromtxt(in_data,delimiter=",")

输入结果如下。

>>> data
array([[ nan, nan, 31.11, 56.33, 1. ],
        [ nan, nan, 12. , 16.7 , 2. ]])

如你所见,开始的两个列的数据并没有被读取。

1.21.2 操作方法

我们首先导入必需的库,然后定义一个输入样板,最后演示一下数据预处理。

import numpy as np
from StringIO import StringIO

# 定义一个数据集
in_data = StringIO("30kg,inr2000,31.11,56.33,1\
n52kg,inr8000.35,12,16.7,2")

# 1.使用lambda函数定义两个数据预处理函数
strip_func_1 = lambda x : float(x.rstrip("kg"))
strip_func_2 = lambda x : float(x.lstrip("inr"))

# 2.创建一个函数的字典
convert_funcs = {0:strip_func_1,1:strip_func_2}

# 3.将这个函数的字典传递给genfromtxt
data = np.genfromtxt(in_data,delimiter=",", converters=convert_funcs)

# 4.使用lambda函数来处理转换过程
in_data = StringIO("10,20,30\n56,,90\n33,46,89")
mss_func = lambda x : float(x.strip() or -999)
data = np.genfromtxt(in_data,delimiter=",", converters={1:mss_func})

1.21.3 工作原理

第1步中,我们定义了两个lambda函数,一个将列1中的字符串“kg”从右面清除,另一个将列2中的字符串“inr”从左面清除。

第2步中,我们继续定义一个字典,它的键就是将被函数应用的列名,值就是函数。这个字典被作为参数converters传递给genfromtxt。

现在印输出结果如下。

>>> data
array([[ 3.00000000e+01, 2.00000000e+03, 3.11100000e+01,
           5.63300000e+01, 1.00000000e+00],
        [ 5.20000000e+01, 8.00035000e+03, 1.20000000e+01,
           1.67000000e+01, 2.00000000e+00]])

请注意Nan值不见了,我们获取到了输入数据里的真实值。

1.21.4 更多内容

converters还能用lambda函数来处理输入中丢失的记录。

in_data = StringIO("10,20,30\n56,,90\n33,46,89")
mss_func = lambda x : float(x.strip() or -999)
data = np.genfromtxt(in_data,delimiter=",", converters={1:mss_func})

lambda函数返回−999来替代丢失的数据。在我们的输入里,第2列第2行是一个空值,因而会被替换为−999,最终的输出如下所示。

>>> data
array([[ 10., 20., 30.],
        [ 56., -999., 90.],
        [ 33., 46., 89.]])

访问以下SciPy文档的链接,你能了解到更多的细节:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.htmlhttp://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html

相关文章
|
11月前
|
机器学习/深度学习 数据可视化 数据处理
从基础到进阶:探索Python在数据科学中的应用
【10月更文挑战第18天】从基础到进阶:探索Python在数据科学中的应用
124 1
|
11月前
|
机器学习/深度学习 数据采集 数据可视化
Python 数据分析:从零开始构建你的数据科学项目
【10月更文挑战第9天】Python 数据分析:从零开始构建你的数据科学项目
205 2
|
6月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
6月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
12月前
|
机器学习/深度学习 数据可视化 数据挖掘
探索Python的奥秘:数据科学中的利器
本文将深入探讨Python编程语言在数据科学领域的强大应用。通过简洁易懂的语言,我们将解析Python的核心概念、流行库以及在实际项目中的应用,帮助您理解为何Python成为数据科学家的首选工具。
120 0
|
10月前
|
机器学习/深度学习 数据采集 数据可视化
Python在数据科学中的应用:从入门到实践
本文旨在为读者提供一个Python在数据科学领域应用的全面概览。我们将从Python的基础语法开始,逐步深入到数据处理、分析和可视化的高级技术。文章不仅涵盖了Python中常用的数据科学库,如NumPy、Pandas和Matplotlib,还探讨了机器学习库Scikit-learn的使用。通过实际案例分析,本文将展示如何利用Python进行数据清洗、特征工程、模型训练和结果评估。此外,我们还将探讨Python在大数据处理中的应用,以及如何通过集成学习和深度学习技术来提升数据分析的准确性和效率。
|
10月前
|
数据采集 数据可视化 数据处理
Python数据科学:Pandas库入门与实践
Python数据科学:Pandas库入门与实践
|
10月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
10月前
|
机器学习/深度学习 数据可视化 数据处理
Python数据科学:从基础到实战
Python数据科学:从基础到实战
138 1
|
10月前
|
数据采集 机器学习/深度学习 数据挖掘
利用Python进行高效的数据清洗与预处理
在数据科学和机器学习项目中,数据清洗与预处理是至关重要的一步。本文将介绍如何使用Python中的Pandas库进行高效的数据清洗与预处理。我们将探讨如何处理缺失值、异常值、重复数据,以及如何进行数据类型转换和特征工程。此外,还将介绍一些实用的技巧来优化数据处理的性能。

推荐镜像

更多