Python 数据科学指南1.20 从表格数据使用数组

数据科学程序开发者面临的首要问题:如何访问数据,并用Python的数据结构让这些数据持续可用。掌握使用Python访问数据的诀窍是非常有用的,能让你避过纷扰,直接面对问题的核心内容。

一般数据是以文本形式存放的,用逗号或者tab作为分隔符。我们可以采用Python的内置文件对象工具来进行处理。如前所述,文件对象实现了_iter_()和next()方法,这让我们可以处理非常大的文件,这些文件无法一次全部装载到内存里,只能每次读取一小部分。

Python的机器学习库,(如scikit-learn)就是基于numpy库,在这节中,我们将研究如何搞笑地读取外部数据,并将之转为NumPy的数组以便后续的数据处理。

示例代码:

#1. 我们先用StringIO来模拟一个小型的表格数据
import numpy as np
#python2 “from StringIO import StringIO”
#python3 “from io import StringIO ”,运行成功。

from io import StringIO
#使用StringIO来模拟表格数据,有3行3列,行通过换行表示,列则通过通过逗号分隔。
in_data = StringIO("10,20,30\n56,89,90\n33,46,89")

#2.使用NumPy的genfromtxt来读取数据,并创建一个NumPy数组。
#np.genfromtxt() 参数1:文件源和文件名 参数2:输入类型 参数3:输入分隔符
data = np.genfromtxt (in_data,dtype=int,delimiter = ',')
print (data)

#3.清除掉一些我们不需要的列
in_data = StringIO("10,20,30\n56,89,90\n33,46,89")
data = np.genfromtxt(in_data,dtype=int,delimiter=",",usecols=(0,1))
print (data)

#4.设定列名
in_data = StringIO("10,20,30\n56,89,90\n33,46,89")
data = np.genfromtxt(in_data,dtype=int,delimiter=",",names="a,b,c")
print (data)

#5.使用列名来处理数据
in_data = StringIO("10,20,30\n56,89,90\n33,46,89")
data = np.genfromtxt(in_data,dtype=int,delimiter=",",names=True)
print (data)

代码输出:

[[10 20 30]

 [56 89 90]

 [33 46 89]]

[[10 20]

 [56 89]

 [33 46]]

[(10, 20, 30) (56, 89, 90) (33, 46, 89)]

[(56, 89, 90) (33, 46, 89)]

函数扩展:

genfromtxt函数:Load data from a text file, with missing values handled as specified.

genfromtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, skip_header=0, skip_footer=0, converters=None, missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=None, replace_space='_', autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True, max_rows=None, encoding='bytes')

   1.唯一必备的参数是数据源的名字,本例中是一个StringIO对象,它可以是一个文件名或者带有read方法的类似于文件的对象,也可以是一个远程的URL。

2.当文件被读取时,genfromtxt将非空行切分成一个字符串序列,空行和注释行会被忽略。我们指定的分隔符将字符串切分为列。常用的分隔符是","和“/t”制表符。函数默认的分隔符是None。

3,列被转换为字符串序列后,列被萃取出来,但是每个独立的列并没有被清除前导或者后导的空格。设置参数autostrip=True有助于避免这类问题。

4.指定跳过前n行或者最后n行,采用headers和footers参数。设置skip_header=n会在读文件时跳过最开始的n行,类似的设置skip_footer=n会跳过最后的n行。

5.usecols可以指定一个包含所需要的列的列表。

6.使用names参数,可以自定义列名,如names="a,b,c".

7.设置names参数为真,输入文件的第一行会被当成列名。

8.Numpy里有一个loadtxt的方法可以方便地从文件中创建NumPy数组。另外,若仅需将数据加载到列表中,可以采用csv库。

猜你喜欢

转载自blog.csdn.net/cjx_cqupt/article/details/88369404
今日推荐