numpy.loadtxt #
- 麻木的。loadtxt ( fname、 dtype=<class 'float'>、 comments='#'、 delimiter=None、转换器=None、 skiprows=0、 usecols=None、 unpack=False、 ndmin=0、编码='bytes'、 max_rows =无, * , quotechar=无, like=无) [来源] #
从文本文件加载数据。
- 参数:
- fname文件、str、pathlib.Path、str 列表、生成器
要读取的文件、文件名、列表或生成器。如果文件扩展名是
.gz
或.bz2
,则首先解压缩该文件。请注意,生成器必须返回字节或字符串。列表中的字符串或生成器生成的字符串被视为行。- dtype数据类型,可选
结果数组的数据类型;默认值:浮动。如果这是结构化数据类型,则生成的数组将是一维的,并且每一行将被解释为数组的一个元素。在这种情况下,使用的列数必须与数据类型中的字段数匹配。
- 注释str 或 str 序列或 None,可选
用于指示注释开始的字符或字符列表。 None 意味着没有评论。为了向后兼容,字节字符串将被解码为“latin1”。默认为“#”。
- 分隔符str,可选
用于分隔值的字符。为了向后兼容,字节字符串将被解码为“latin1”。默认为空白。
版本 1.23.0 中更改:仅支持单个字符分隔符。换行符不能用作分隔符。
- 转换器dict 或 callable,可选
转换器函数用于自定义值解析。如果转换器是可调用的,则该函数将应用于所有列,否则它必须是一个将列号映射到解析器函数的字典。有关更多详细信息,请参阅示例。默认值:无。
版本 1.23.0 中进行了更改:添加了传递单个可调用对象以应用于所有列的功能。
- Skiprows int,可选
跳过第一行,包括注释;默认值:0。
- usecols int 或序列,可选
要读取哪些列,0 为第一列。例如, 将提取第 2、5 和 6 列。默认值“无”会导致读取所有列。
usecols = (1,4,5)
在版本 1.11.0 中更改:当必须读取单个列时,可以使用整数而不是元组。例如,以同样的方式读取第四列。
usecols = 3
usecols = (3,)
- 解包bool, 可选
如果为 True,则返回的数组将被转置,以便可以使用 来解压缩参数。当与结构化数据类型一起使用时,将为每个字段返回数组。默认值为 False。
x, y, z = loadtxt(...)
- ndmin整数,可选
返回的数组至少有ndmin维度。否则单维轴将被挤压。合法值:0(默认)、1 或 2。
1.6.0 版本中的新增功能。
- 编码str,可选
用于解码输入文件的编码。不适用于输入流。特殊值“bytes”启用向后兼容性解决方法,确保您在可能的情况下接收字节数组作为结果,并将“latin1”编码字符串传递给转换器。覆盖此值以接收 unicode 数组并将字符串作为输入传递给转换器。如果设置为“无”,则使用系统默认值。默认值为“字节”。
1.14.0 版本中的新增功能。
- max_rows int,可选
在skiprows行之后读取max_rows行内容。默认是读取所有行。请注意,不包含任何数据的空行(例如空行和注释行)不计入max_rows,而此类行计入Skiprows。
1.16.0 版本中的新增内容。
在版本 1.23.0 中更改:不包含数据的行,包括注释行(例如,以 '#' 开头或通过comments指定的行)不计入max_rows。
- quotechar unicode 字符或 None,可选
用于表示引用项的开始和结束的字符。引用的项目中出现的分隔符或注释字符将被忽略。默认值为
quotechar=None
,这意味着禁用引用支持。如果在带引号的字段中找到两个连续的quotechar实例,则第一个将被视为转义字符。请参阅示例。
1.23.0 版本中的新增功能。
- 类似array_like,可选
允许创建非 NumPy 数组的引用对象。如果传入的类似数组
like
支持__array_function__
协议,则结果将由它定义。在这种情况下,它确保创建一个与通过此参数传入的数组对象兼容的数组对象。1.20.0 版本中的新增功能。
- 返回:
- 输出数组
从文本文件中读取的数据。
也可以看看
load
,fromstring
,fromregex
genfromtxt
加载具有按指定处理的缺失值的数据。
scipy.io.loadmat
读取 MATLAB 数据文件
笔记
此功能旨在成为简单格式文件的快速阅读器。该
genfromtxt
函数提供了更复杂的处理,例如具有缺失值的行。输入文本文件中的每一行必须具有相同数量的值才能读取所有值。如果所有行没有相同数量的值,则可以通过usecols指定列来读取最多 n 列的子集(其中 n 是所有行中存在的最少值数) 。
1.10.0 版本中的新增内容。
Python float.hex 方法生成的字符串可用作浮点数的输入。
例子
>>> from io import StringIO # StringIO behaves like a file object >>> c = StringIO("0 1\n2 3") >>> np.loadtxt(c) array([[0., 1.], [2., 3.]])
>>> d = StringIO("M 21 72\nF 35 58") >>> np.loadtxt(d, dtype={'names': ('gender', 'age', 'weight'), ... 'formats': ('S1', 'i4', 'f4')}) array([(b'M', 21, 72.), (b'F', 35, 58.)], dtype=[('gender', 'S1'), ('age', '<i4'), ('weight', '<f4')])
>>> c = StringIO("1,0,2\n3,0,4") >>> x, y = np.loadtxt(c, delimiter=',', usecols=(0, 2), unpack=True) >>> x array([1., 3.]) >>> y array([2., 4.])
Converters参数用于指定在解析之前预处理文本的函数。转换器可以是一个字典,将预处理函数映射到每列:
>>> s = StringIO("1.618, 2.296\n3.141, 4.669\n") >>> conv = { ... 0: lambda x: np.floor(float(x)), # conversion fn for column 0 ... 1: lambda x: np.ceil(float(x)), # conversion fn for column 1 ... } >>> np.loadtxt(s, delimiter=",", converters=conv) array([[1., 3.], [3., 5.]])
转换器可以是可调用的而不是字典,在这种情况下它应用于所有列:
>>> s = StringIO("0xDE 0xAD\n0xC0 0xDE") >>> import functools >>> conv = functools.partial(int, base=16) >>> np.loadtxt(s, converters=conv) array([[222., 173.], [192., 222.]])
此示例显示如何使用转换器将尾随减号的字段转换为负数。
>>> s = StringIO('10.01 31.25-\n19.22 64.31\n17.57- 63.94') >>> def conv(fld): ... return -float(fld[:-1]) if fld.endswith(b'-') else float(fld) ... >>> np.loadtxt(s, converters=conv) array([[ 10.01, -31.25], [ 19.22, 64.31], [-17.57, 63.94]])
使用可调用作为转换器对于处理具有不同格式的值特别有用,例如带下划线的浮点数:
>>> s = StringIO("1 2.7 100_000") >>> np.loadtxt(s, converters=float) array([1.e+00, 2.7e+00, 1.e+05])
这个想法可以扩展到自动处理以许多不同格式指定的值:
>>> def conv(val): ... try: ... return float(val) ... except ValueError: ... return float.fromhex(val) >>> s = StringIO("1, 2.5, 3_000, 0b4, 0x1.4000000000000p+2") >>> np.loadtxt(s, delimiter=",", converters=conv, encoding=None) array([1.0e+00, 2.5e+00, 3.0e+03, 1.8e+02, 5.0e+00])
请注意,在默认情况下
encoding="bytes"
,转换器函数的输入是 latin-1 编码的字节字符串。要在转换之前停用隐式编码,请使用encoding=None
>>> s = StringIO('10.01 31.25-\n19.22 64.31\n17.57- 63.94') >>> conv = lambda x: -float(x[:-1]) if x.endswith('-') else float(x) >>> np.loadtxt(s, converters=conv, encoding=None) array([[ 10.01, -31.25], [ 19.22, 64.31], [-17.57, 63.94]])
使用quotechar参数启用对带引号字段的支持。当注释和分隔符出现在由quotechar描述的引用项中时,它们将被忽略:
>>> s = StringIO('"alpha, #42", 10.0\n"beta, #64", 2.0\n') >>> dtype = np.dtype([("label", "U12"), ("value", float)]) >>> np.loadtxt(s, dtype=dtype, delimiter=",", quotechar='"') array([('alpha, #42', 10.), ('beta, #64', 2.)], dtype=[('label', '<U12'), ('value', '<f8')])
引用的字段可以用多个空格字符分隔:
>>> s = StringIO('"alpha, #42" 10.0\n"beta, #64" 2.0\n') >>> dtype = np.dtype([("label", "U12"), ("value", float)]) >>> np.loadtxt(s, dtype=dtype, delimiter=None, quotechar='"') array([('alpha, #42', 10.), ('beta, #64', 2.)], dtype=[('label', '<U12'), ('value', '<f8')])
带引号字段中的两个连续引号字符被视为单个转义字符:
>>> s = StringIO('"Hello, my name is ""Monty""!"') >>> np.loadtxt(s, dtype="U", delimiter=",", quotechar='"') array('Hello, my name is "Monty"!', dtype='<U26')
当所有行不包含相同数量的值时读取列的子集:
>>> d = StringIO("1 2\n2 4\n3 9 12\n4 16 20") >>> np.loadtxt(d, usecols=(0, 1)) array([[ 1., 2.], [ 2., 4.], [ 3., 9.], [ 4., 16.]])