千家信息网

NumPy怎么使用genfromtxt导入数据

发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,这篇"NumPy怎么使用genfromtxt导入数据"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一
千家信息网最后更新 2024年12月12日NumPy怎么使用genfromtxt导入数据

这篇"NumPy怎么使用genfromtxt导入数据"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"NumPy怎么使用genfromtxt导入数据"文章吧。

genfromtxt介绍

先看下genfromtxt的定义:

numpy.genfromtxt(fname, dtype=, comments='#', delimiter=None, skip_header=0, skip_footer=0, converters=None, missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=" !#$%&'()*+, -./:;<=>?@[\]^{|}~", replace_space='_', autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True, max_rows=None, encoding='bytes')

genfromtxt可以接受多个参数,这么多参数中只有fname是必须的参数,其他的都是可选的。

fname可以有多种形式,可以是file, str, pathlib.Path, list of str, 或者generator

如果是单独的str,那么默认是本地或者远程文件的名字。如果是list of str,那么每个str都被当做文件中的一行数据。如果传入的是远程的文件,这个文件会被自动下载到本地目录中。

genfromtxt还可以自动识别文件是否是压缩类型,目前支持两种压缩类型:gzip 和 bz2。

接下来我们看下genfromtxt的常见应用:

使用之前,通常需要导入两个库:

from io import StringIOimport numpy as np

StringIO会生成一个String对象,可以作为genfromtxt的输入。

我们先定义一个包含不同类型的StringIO:

s = StringIO(u"1,1.3,abcde")

这个StringIO包含一个int,一个float和一个str。并且分割符是 ,

我们看下genfromtxt最简单的使用:

In [65]: data = np.genfromtxt(s)In [66]: dataOut[66]: array(nan)

因为默认的分隔符是delimiter=None,所以StringIO中的数据会被作为一个整体转换成数组,结果就是nan。

下面我们添加一个逗号分割符:

In [67]: _ = s.seek(0)In [68]: data = np.genfromtxt(s,delimiter=",")In [69]: dataOut[69]: array([1. , 1.3, nan])

这次有输出了,但是最后一个字符串因为不能被转换成为float,所以得到了nan。

注意,我们第一行需要重置StringIO的指针到文件的开头。这里我们使用 s.seek(0)。

那么怎么把最后一个str也进行转换呢?我们需要手动指定dtype:

In [74]: _ = s.seek(0)In [75]: data = np.genfromtxt(s,dtype=float,delimiter=",")In [76]: dataOut[76]: array([1. , 1.3, nan])

上面我们指定了所有的数组类型都是float,我们还可以分别为数组的每个元素指定类型:

In [77]: _ = s.seek(0)In [78]: data = np.genfromtxt(s,dtype=[int,float,'S5'],delimiter=",")In [79]: dataOut[79]: array((1, 1.3, b'abcde'), dtype=[('f0', '

我们分别使用int,float和str来对文件中的类型进行转换,可以看到得到了正确的结果。

除了指定类型,我们还可以指定名字,上面的例子中,我们没有指定名字,所以使用的是默认的f0,f1,f2。看一个指定名字的例子:

In [214]: data = np.genfromtxt(s, dtype="i8,f8,S5",names=['myint','myfloat','mystring'], delimiter=",")In [215]: dataOut[215]:array((1, 1.3, b'abcde'),  dtype=[('myint', '

分隔符除了使用字符之外,还可以使用index:

~~~pythonIn [216]: s = StringIO(u"11.3abcde")
In [216]: s = StringIO(u"11.3abcde")
In [217]: data = np.genfromtxt(s, dtype=None, names=['intvar','fltvar','strvar'],
…: delimiter=[1,3,5])

In [218]: data
Out[218]:
array((1, 1.3, b'abcde'),
dtype=[('intvar', '

上面我们使用index作为s的分割。

# 多维数组

如果数据中有换行符,那么可以使用genfromtxt来生成多维数组:

~~~Python
>>> data = u"1, 2, 3\n4, 5, 6″
>>> np.genfromtxt(StringIO(data), delimiter=",")
array([[ 1., 2., 3.],
[ 4., 5., 6.]])

autostrip

使用autostrip 可以删除数据两边的空格:

>>> data = u"1, abc , 2\n 3, xxx, 4">>> # Without autostrip>>> np.genfromtxt(StringIO(data), delimiter=",", dtype="|U5")array([['1', ' abc ', ' 2'],   ['3', ' xxx', ' 4']], dtype='>> # With autostrip>>> np.genfromtxt(StringIO(data), delimiter=",", dtype="|U5", autostrip=True)array([['1', 'abc', '2'],   ['3', 'xxx', '4']], dtype='

comments

默认的comments 是 # ,数据中所有以# 开头的都被看做是注释。

>>> data = u"""#... # Skip me !... # Skip me too !... 1, 2... 3, 4... 5, 6 #This is the third line of the data... 7, 8... # And here comes the last line... 9, 0... """>>> np.genfromtxt(StringIO(data), comments="#", delimiter=",")array([[1., 2.],       [3., 4.],       [5., 6.],       [7., 8.],       [9., 0.]])

跳过行和选择列

可以使用skip_headerskip_footer 来跳过返回的数组特定的行:

>>> data = u"\n".join(str(i) for i in range(10))>>> np.genfromtxt(StringIO(data),)array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])>>> np.genfromtxt(StringIO(data),...               skip_header=3, skip_footer=5)array([ 3.,  4.])

可以使用usecols 来选择特定的行数:

>>> data = u"1 2 3\n4 5 6">>> np.genfromtxt(StringIO(data), usecols=(0, -1))array([[ 1.,  3.],       [ 4.,  6.]])

如果列还有名字的话,可以用usecols 来选择列的名字:

>>> data = u"1 2 3\n4 5 6">>> np.genfromtxt(StringIO(data),...               names="a, b, c", usecols=("a", "c"))array([(1.0, 3.0), (4.0, 6.0)],      dtype=[('a', '>> np.genfromtxt(StringIO(data),...               names="a, b, c", usecols=("a, c"))    array([(1.0, 3.0), (4.0, 6.0)],          dtype=[('a', '

以上就是关于"NumPy怎么使用genfromtxt导入数据"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

数据 文件 类型 名字 数组 内容 参数 选择 一行 例子 分隔符 字符 就是 开头 文章 知识 篇文章 结果 多维 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山东标准软件开发预算 我的世界宠物go服务器 配置access数据库 网络安全宣传周 专刊 网络技术介绍及答案 跑分系统开发软件开发 数据库基础教程第六章答案 广电网络技术有限公司经理 滨海新区节能软件开发报价价钱 华为超融合服务器调整硬盘容量 黄山通信软件开发外包 上海品牌网络技术推荐咨询 安徽机械软件开发销售厂家 冰点还原服务器快捷方式 软件开发后可以转岗吗 什么是数据库技术视频 数据库并发控制机制的功能 快速查看服务器硬盘信息 海上风电网络技术 网络技术有限公司拟简介范本 网络安全管理局接受投诉吗 数据库中允许重复值 软件开发工程师每天代码量 网络安全专业排名知乎 第一届网络安全自主可控 计算机三级分数网络技术分布 中国软件开发项目管理问题 网络安全量子信息处理 购买全球ip数据库 富民综合软件开发报价表
0