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)[source]#

从文本文件加载数据,处理缺失值的方式由指定。

除第一个 skip_header 行之外的每一行都在 delimiter 字符处分割,并丢弃 comments 字符之后的字符。

参数:
fnamefile, str, pathlib.Path, list of str, generator

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

dtypedtype, 可选

结果数组的数据类型。如果为 None,则将根据每一列的内容分别确定 dtype。

commentsstr, 可选

用于指示注释开始的字符。注释字符之后一行中出现的字符都会被丢弃。

delimiterstr, int 或 sequence, 可选

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

skiprowsint, 可选

skiprows 在 numpy 1.10 中已被移除。请使用 skip_header 代替。

skip_headerint, 可选

要跳过的文件开头的行数。

skip_footerint, 可选

要跳过的文件末尾的行数。

convertersvariable, 可选

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

missingvariable, 可选

missing 在 numpy 1.10 中已被移除。请使用 missing_values 代替。

missing_valuesvariable, 可选

与缺失数据对应的字符串集。

filling_valuesvariable, 可选

当数据缺失时,将用作默认值的值集。

usecolssequence, 可选

要读取的列,其中 0 代表第一列。例如,usecols = (1, 4, 5) 将提取第 2、第 5 和第 6 列。

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

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

excludelistsequence, 可选

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

deletecharsstr, 可选

一个字符串,其中包含从名称中删除的无效字符。

defaultfmtstr, 可选

用于定义默认字段名的格式,例如“f%i”或“f_%02i”。

autostripbool, 可选

是否自动从变量中去除空格。

replace_spacechar, 可选

用于替换变量名中空格的字符。默认情况下,使用“_”。

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

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

unpackbool, 可选

如果为 True,则返回的数组将被转置,以便可以使用 x, y, z = genfromtxt(...) 解包参数。与结构化数据类型一起使用时,将返回每个字段的数组。默认值为 False。

usemaskbool, 可选

如果为 True,则返回一个掩码数组。如果为 False,则返回一个普通数组。

loosebool, 可选

如果为 True,则不对无效值引发错误。

invalid_raisebool, 可选

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

max_rowsint, 可选

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

版本 1.10.0 中新增。

encodingstr, 可选

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

版本 1.14.0 中新增。

在版本 2.0 中更改: 在 NumPy 2 之前,Python 2 兼容性的默认值为 'bytes'。现在默认值为 None

ndminint, 可选

loadtxt 相同的参数

版本 1.23.0 中新增。

likearray_like, 可选

参考对象,允许创建非 NumPy 数组的数组。如果作为 like 传入的数组类支持 __array_function__ 协议,则结果将由它定义。在这种情况下,它确保创建与通过此参数传入的对象兼容的数组对象。

版本 1.20.0 中新增。

返回值:
outndarray

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

参见

numpy.loadtxt

当没有数据丢失时,等效函数。

注意

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

  • 当变量被命名(通过灵活的 dtype 或 names 序列)时,文件中不能有任何标题(否则会引发 ValueError 异常)。

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

  • 由于 dtype 的发现,自定义转换器可能会收到意外的值。

参考文献

[1]

NumPy 用户指南,第 I/O with NumPy 节。

示例

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

带有混合 dtype 的逗号分隔文件

>>> 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 和名称

>>> _ = 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')])