繁体   English   中英

numpy genfromtxt - 如果未提供标题,则推断列标题

[英]numpy genfromtxt - infer column header if headers not provided

我知道使用genfromtxtdefaultfmt参数可用于推断默认列名,如果列名不在输入数据中,这很有用。 如果没有提供defaultfmt ,则默认为f%i 例如

>>> data = StringIO("1 2 3\n 4 5 6")
>>> np.genfromtxt(data, dtype=(int, float, int))
array([(1, 2.0, 3), (4, 5.0, 6)],
  dtype=[('f0', '<i8'), ('f1', '<f8'), ('f2', '<i8')])

所以这里我们有自动生成的列名f0f1f2

但是,如果我想要什么numpy的推断列标题和数据类型? 我以为你是用dtype=None来做的。 像这样

>>> data3 = StringIO("1 2 3\n 4 5 6")
>>> np.genfromtxt(data3, dtype=None, ???)  # some parameter combo
array([(1, 2, 3), (4, 5, 6)],
  dtype=[('f0', '<i8'), ('f1', '<i8'), ('f2', '<i8')])  

我仍然想要f0f1 ...等自动生成的列名。 我希望 numpy 根据数据自动确定数据类型,我认为这是执行dtype=None的全部意义所在。

编辑但不幸的是,这并不总是有效。

当我同时拥有浮点数和整数时,这种情况有效。

>>> data3b = StringIO("1 2 3.0\n 4 5 6.0")
>>> np.genfromtxt(data3b, dtype=None)
array([(1, 2, 3.), (4, 5, 6.)],
  dtype=[('f0', '<i8'), ('f1', '<i8'), ('f2', '<f8')])

因此 numpy 正确推断出前 2 列的 i8 数据类型和最后一列的 f8 数据类型。

但是,如果我提供所有整数,推断的列名称就会消失。

>>> data3c = StringIO("1 2 3\n 4 5 6")
>>> np.genfromtxt(data3c, dtype=None)
array([[1, 2, 3],
   [4, 5, 6]])

我的相同代码可能会或可能不会根据输入数据工作? 这听起来不对。

是的,我知道有熊猫。 但我不是故意使用熊猫。 所以请多多包涵。

In [2]: txt = '''1,2,3
   ...: 4,5,6'''.splitlines()

Defaylt 二维浮游物阵列:

In [6]: np.genfromtxt(txt, delimiter=',',encoding=None)
Out[6]: 
array([[1., 2., 3.],
       [4., 5., 6.]])

整数的 2d:

In [7]: np.genfromtxt(txt, dtype=None, delimiter=',',encoding=None)
Out[7]: 
array([[1, 2, 3],
       [4, 5, 6]])

指定的字段数据类型:

In [8]: np.genfromtxt(txt, dtype='i,i,i', delimiter=',',encoding=None)
Out[8]: 
array([(1, 2, 3), (4, 5, 6)],
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4')])

指定的字段名称:

In [9]: np.genfromtxt(txt, dtype=None, delimiter=',',encoding=None, names=['a','b','c'])
Out[9]: 
array([(1, 2, 3), (4, 5, 6)],
      dtype=[('a', '<i8'), ('b', '<i8'), ('c', '<i8')])

非结构化数组可以转换为结构化数组:

In [10]: import numpy.lib.recfunctions as rf
In [11]: rf.unstructured_to_structured(Out[7])
Out[11]: 
array([(1, 2, 3), (4, 5, 6)],
      dtype=[('f0', '<i8'), ('f1', '<i8'), ('f2', '<i8')])

numpy ,默认的首选数组是多维数值。 这就是为什么它会产生Out7]如果可以的话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM