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

Python numpy genfromtxt-如果未提供标题,则推断列标题,python,numpy,genfromtxt,Python,Numpy,Genfromtxt,我了解到,使用genfromtxt,可以使用defaultfmt参数推断默认列名,如果列名不在输入数据中,这将非常有用。如果未提供,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'

我了解到,使用
genfromtxt
,可以使用
defaultfmt
参数推断默认列名,如果列名不在输入数据中,这将非常有用。如果未提供,
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')])
我仍然需要自动生成的
f0
f1
…等列名。我希望numpy根据数据自动确定数据类型,我认为这是执行
dtype=None
的全部要点

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

当我同时拥有float和int时,这种情况就有效了

>>> 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')])
根据输入数据,我的相同代码可能有效,也可能无效?听起来不对

是的,我知道那里有熊猫。但我不是故意使用熊猫的。所以请容忍我

In [2]: txt = '''1,2,3
   ...: 4,5,6'''.splitlines()
Defaylt Flaot 2d阵列:

In [6]: np.genfromtxt(txt, delimiter=',',encoding=None)
Out[6]: 
array([[1., 2., 3.],
       [4., 5., 6.]])
ints的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')])
[8]中的
:np.genfromtxt(txt,dtype='i,i,i',delimiter='1','编码=None)
出[8]:
数组([(1,2,3),(4,5,6)],

dtype=[('f0','看起来这些值都是整数,因此默认操作是返回常规2d数组而不是结构化数组。dtype不必有名称。例如
dtype='i,f,i'
['i','f','i']
谢谢。你是说要传入数据类型吗?问题是,我不想传入数据类型的任何内容。至于所有整数与整数/浮点的混合-如果是混合的,似乎numpy做了我想做的事情,但如果是混合的,则不是所有整数。谢谢。你能详细说明最后一条语句吗?所以
numpy
如果可以的话,默认为非结构化的吗如果我理解正确的话,
numpy
认为如果所有的东西都是
int
s,那么非结构化是可以的。但是如果我们混合了
float
s和
int
s,非结构化是不可能的。所以
genfromtxt
自动给我结构化的。对吗?
np.array([1,2,3],[4,5,6])
生成了一个(2,3)int-dtype数组。您必须使用类似于
Out[11]
的表达式来生成结构化数组。换句话说,它必须是一个元组列表,具有完全指定的
dtype
。谢谢。原因是什么
np.genfromtxt(StringIO(“1 2 3.0\n 4 5 6.0”),dtype=None)
生成具有
dtype
的完全结构化数组?我只想知道什么时候需要执行
输出[11]
,因为它似乎并不总是必要的。对于
dtype=None
它注意到一些列是浮点的,一些是整数。为了保持这种混合,它必须使用结构化的dtype。我之前的评论是关于直接使用
np.array
命令生成数组(不是通过字符串和
genfromtxt
).您是否意识到,在进行计算和索引时,结构化数组和非结构化数组的行为有所不同?不要跳过基本的
numpy
阅读。
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')])