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, list of str, generator
要读取的文件,文件名,列表或生成器.如果文件名扩展名为
.gz或.bz2,则首先解压缩该文件.请注意,生成器必须返回字节或字符串.列表中的字符串或生成器产生的字符串被视为行.- dtypedtype, optional
结果数组的数据类型.如果为None,dtype将由每一列的内容单独确定.
- commentsstr, optional
用于指示注释开始的字符.一行中注释后的所有字符都将被丢弃.
- delimiterstr, int, or sequence, optional
用于分隔值的字符串.默认情况下,任何连续的空白都充当分隔符.也可以提供整数或整数序列作为每个字段的宽度.
- skiprows整数,可选
skiprows 在 numpy 1.10 中已删除.请改用 skip_header .
- skip_header整数,可选
在文件开头跳过的行数.
- skip_footer整数,可选
在文件末尾跳过的行数.
- convertersvariable, optional
将列的数据转换为值的函数集.转换器还可以用于为缺失数据提供默认值:
converters = {3: lambda s: float(s or 0)}.- 缺失variable, optional
missing 在 numpy 1.10 中已移除.请使用 missing_values 代替.
- missing_valuesvariable, optional
与缺失数据相对应的字符串集合.
- filling_valuesvariable, optional
当数据缺失时,用作默认值的值的集合.
- 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, optional
一个字符串,组合了必须从名称中删除的无效字符.
- defaultfmtstr, optional
用于定义默认字段名称的格式,例如“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.默认为读取整个文件.
- encodingstr, optional
用于解码输入文件的编码.当 fname 是文件对象时不适用.特殊值 ‘bytes’ 启用向后兼容性解决方法,以确保在可能的情况下接收字节数组,并将 latin1 编码的字符串传递给转换器.覆盖此值以接收 unicode 数组并将字符串作为输入传递给转换器.如果设置为 None,则使用系统默认值.默认值为 ‘bytes’.
在 2.0 版本发生变更: 在 NumPy 2 之前,为了与 Python 2 兼容,默认值为
'bytes'.现在默认值为None.- ndmin整数,可选
与
loadtxt相同的参数在 1.23.0 版本加入.
- likearray_like, optional
参考对象以允许创建非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')])