numpy.genfromtxt#

numpy.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=" !#$%&'()*+, -./:;<=>?@[\\]^{|}~", replace_space='_', autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True, max_rows=None, encoding=None, *, ndmin=0, like=None)[源代码]#

从文本文件加载数据,并按指定处理缺失值.

在第一个 skip_header 行之后的每一行都在 delimiter 字符处分割,并且 comments 字符之后的字符被丢弃.

参数:
fnamefile, str, pathlib.Path, str 的列表, 生成器

要读取的文件、文件名、列表或生成器.如果文件扩展名是 .gz.bz2,则首先解压缩文件.请注意,生成器必须返回字节或字符串.列表中的字符串或生成器生成的字符串被视为行.

dtypedtype,可选

结果数组的类型.如果为 None,则将根据每个列的内容单独确定类型.

commentsstr, 可选

用于指示注释开始的字符.注释后的所有字符在一行中都会被丢弃.

delimiterstr, int, 或序列, 可选

用于分隔值的字符串.默认情况下,任何连续的空白字符都作为分隔符.也可以提供一个整数或整数序列作为每个字段的宽度.

skiprowsint, 可选

skiprows 在 numpy 1.10 中已被移除.请改用 skip_header.

skip_headerint, 可选

文件开头要跳过的行数.

skip_footerint, 可选

文件末尾要跳过的行数.

converters变量, 可选

将列数据转换为值的一组函数.转换器还可以用于为缺失数据提供默认值:converters = {3: lambda s: float(s or 0)}.

missing变量, 可选

missing 在 numpy 1.10 中被移除.请改用 missing_values.

missing_values变量, 可选

对应于缺失数据的一组字符串.

filling_values变量, 可选

在数据缺失时用作默认值的一组值.

usecols序列, 可选

要读取哪些列,其中0是第一列.例如,``usecols = (1, 4, 5)`` 将提取第2、第5和第6列.

names{None, True, str, sequence}, 可选

如果 names 为 True,字段名将从第一个 skip_header 行之后的第一个行中读取.这一行可以选择性地在前面加上一个注释分隔符.注释分隔符之前的任何内容都将被丢弃.如果 names 是一个序列或一个以逗号分隔的单字符串名称,这些名称将用于定义结构化 dtype 中的字段名.如果 names 为 None,将使用 dtype 字段的名称(如果有).

excludelist序列, 可选

要排除的名称列表.此列表附加到默认列表 [‘return’,’file’,’print’].被排除的名称附加一个下划线:例如,`file` 将变为 file_.

deletecharsstr, 可选

一个包含必须从名称中删除的无效字符的字符串.

defaultfmtstr, 可选

一种用于定义默认字段名称的格式,例如”f%i”或”f_%02i”.

autostrip布尔值, 可选

是否自动从变量中去除空白字符.

replace_space字符, 可选

在变量名中用于替换空格的字符.默认使用 ‘_’.

case_sensitive{True, False, ‘upper’, ‘lower’}, 可选

如果为 True,字段名称区分大小写.如果为 False 或 ‘upper’,字段名称转换为大写.如果为 ‘lower’,字段名称转换为小写.

unpack布尔值, 可选

如果为真,返回的数组是转置的,因此可以使用 x, y, z = genfromtxt(...) 进行解包.当与结构化数据类型一起使用时,会为每个字段返回数组.默认为假.

usemask布尔值, 可选

如果为真,返回一个掩码数组.如果为假,返回一个常规数组.

loose布尔值, 可选

如果为真,则不对无效值引发错误.

invalid_raise布尔值, 可选

如果为真,如果在列数中检测到不一致,则会引发异常.如果为假,则会发出警告并跳过有问题的行.

max_rowsint, 可选

要读取的最大行数.不能与 skip_footer 同时使用.如果给定,该值必须至少为 1.默认是读取整个文件.

在 1.10.0 版本加入.

encodingstr, 可选

用于解码输入文件的编码.当 fname 是文件对象时不适用.特殊值 ‘bytes’ 启用向后兼容的变通方法,确保在可能的情况下接收字节数组,并将 latin1 编码的字符串传递给转换器.覆盖此值以接收 unicode 数组并将字符串作为输入传递给转换器.如果设置为 None,则使用系统默认值.默认值是 ‘bytes’.

在 1.14.0 版本加入.

在 2.0 版本发生变更: 在 NumPy 2 之前,默认值是 'bytes',这是为了与 Python 2 兼容.现在默认值是 None.

ndminint, 可选

loadtxt 相同的参数

在 1.23.0 版本加入.

likearray_like, 可选

引用对象以允许创建不是 NumPy 数组的数组.如果作为 like 传递的类数组对象支持 __array_function__ 协议,结果将由它定义.在这种情况下,它确保创建一个与此参数传递的对象兼容的数组对象.

在 1.20.0 版本加入.

返回:
outndarray

从文本文件读取的数据.如果 usemask 为 True,这是一个掩码数组.

参见

numpy.loadtxt

当没有数据缺失时的等效函数.

备注

  • 当使用空格作为分隔符,或者当没有给出分隔符作为输入时,两个字段之间不应有任何缺失数据.

  • 当变量被命名时(无论是通过灵活的dtype还是使用`names`序列),文件中不能有任何标题(否则会引发ValueError异常).

  • 默认情况下,单个值不会去除空格.当使用自定义转换器时,请确保该函数确实去除了空格.

  • 由于数据类型发现,自定义转换器可能会收到意外的值.

参考文献

[1]

NumPy 用户指南, 章节 使用 NumPy 进行 I/O.

示例

>>> from io import StringIO
>>> import numpy as np

逗号分隔的混合数据类型文件

>>> s = StringIO("1,1.3,abcde")
>>> data = np.genfromtxt(s, dtype=[('myint','i8'),('myfloat','f8'),
... ('mystring','S5')], delimiter=",")
>>> data
array((1, 1.3, b'abcde'),
      dtype=[('myint', '<i8'), ('myfloat', '<f8'), ('mystring', 'S5')])

使用 dtype = None

>>> _ = s.seek(0) # needed for StringIO example only
>>> data = np.genfromtxt(s, dtype=None,
... names = ['myint','myfloat','mystring'], delimiter=",")
>>> data
array((1, 1.3, 'abcde'),
      dtype=[('myint', '<i8'), ('myfloat', '<f8'), ('mystring', '<U5')])

指定 dtype 和 names

>>> _ = s.seek(0)
>>> data = np.genfromtxt(s, dtype="i8,f8,S5",
... names=['myint','myfloat','mystring'], delimiter=",")
>>> data
array((1, 1.3, b'abcde'),
      dtype=[('myint', '<i8'), ('myfloat', '<f8'), ('mystring', 'S5')])

一个带有固定宽度列的示例

>>> s = StringIO("11.3abcde")
>>> data = np.genfromtxt(s, dtype=None, names=['intvar','fltvar','strvar'],
...     delimiter=[1,3,5])
>>> data
array((1, 1.3, 'abcde'),
      dtype=[('intvar', '<i8'), ('fltvar', '<f8'), ('strvar', '<U5')])

一个展示注释的示例

>>> f = StringIO('''
... text,# of chars
... hello world,11
... numpy,5''')
>>> np.genfromtxt(f, dtype='S12,S12', delimiter=',')
array([(b'text', b''), (b'hello world', b'11'), (b'numpy', b'5')],
  dtype=[('f0', 'S12'), ('f1', 'S12')])