Python 在numpy矩阵中获取文件输入

Python 在numpy矩阵中获取文件输入,python,numpy,Python,Numpy,我找不到在numpy矩阵中输入给定文件的方法。 我尝试了np.loadtxt(),但无法获取数据 我的文件格式如下: 列数=9(除第一个字段外,所有其他字段均为浮点) 我也尝试过在列表中输入信息,然后尝试使其成为numpy矩阵,但也失败了 > P>你可能想考虑使用熊猫> /COD>,它更适合于同质数据,并且它的 Read Syvv < /Case>函数将把你的数据文件立即转换成你可以使用的东西。 您可以为每个列指定一个名称—如果不这样做,函数将把第一个数据行解释为列标题 >>>

我找不到在numpy矩阵中输入给定文件的方法。 我尝试了
np.loadtxt()
,但无法获取数据

我的文件格式如下: 列数=9(除第一个字段外,所有其他字段均为浮点)


我也尝试过在列表中输入信息,然后尝试使其成为numpy矩阵,但也失败了

> P>你可能想考虑使用<代码>熊猫> /COD>,它更适合于同质数据,并且它的<代码> Read Syvv < /Case>函数将把你的数据文件立即转换成你可以使用的东西。 您可以为每个列指定一个名称—如果不这样做,函数将把第一个数据行解释为列标题

>>> import pandas as pd
>>> data = pd.read_csv("/tmp/data.txt",
                 names=['sex', 'one', 'two', 'three', 'four',
                        'five', 'six', 'seven', 'eight'])
>>> print(data)
  sex    one   two  three    four    five     six  seven  eight
0   M  0.475  0.37  0.125  0.5095  0.2165  0.1125  0.165      9
1   F  0.550  0.44  0.150  0.8945  0.3145  0.1510  0.320     19

你可能想考虑使用<代码>熊猫> /COD>,它更适合于同质数据,并且它的<代码> Read Syvv < /Case>函数将把你的数据文件转换成你可以使用的东西。

您可以为每个列指定一个名称—如果不这样做,函数将把第一个数据行解释为列标题

>>> import pandas as pd
>>> data = pd.read_csv("/tmp/data.txt",
                 names=['sex', 'one', 'two', 'three', 'four',
                        'five', 'six', 'seven', 'eight'])
>>> print(data)
  sex    one   two  three    four    five     six  seven  eight
0   M  0.475  0.37  0.125  0.5095  0.2165  0.1125  0.165      9
1   F  0.550  0.44  0.150  0.8945  0.3145  0.1510  0.320     19

将您的示例作为行列表:

In [1]: txt=b"""
   ...: M,0.475,0.37,0.125,0.5095,0.2165,0.1125,0.165,9
   ...: F,0.55,0.44,0.15,0.8945,0.3145,0.151,0.32,19
   ...: """
In [2]: txt=txt.splitlines()
genfromtxt
可以使用
dtype=None
加载它:

In [16]: data = np.genfromtxt(txt, delimiter=',', dtype=None)
In [17]: data
Out[17]: 
array([(b'M', 0.475, 0.37, 0.125, 0.5095, 0.2165, 0.1125, 0.165, 9),
       (b'F', 0.55, 0.44, 0.15, 0.8945, 0.3145, 0.151, 0.32, 19)], 
      dtype=[('f0', 'S1'), ('f1', '<f8'), ('f2', '<f8'), ('f3', '<f8'), ('f4', '<f8'), ('f5', '<f8'), ('f6', '<f8'), ('f7', '<f8'), ('f8', '<i4')])
In [18]: data['f0']
Out[18]: 
array([b'M', b'F'], 
      dtype='|S1')
In [19]: data['f3']
Out[19]: array([ 0.125,  0.15 ])
In [20]: 
f1
字段是一个二维形状数组(2,8)

np.loadtxt
也可以,但是它的
dtype
解释没有那么灵活。从
genfromtxt
示例复制
dtype
会产生相同的结果

 datal=np.loadtxt(txt,delimiter=',',dtype=data.dtype)

pandas
还有一个很好的csv阅读器,具有更高的速度和灵活性。如果您已经在使用pandas,这是一个不错的选择。

将您的示例作为行列表:

In [1]: txt=b"""
   ...: M,0.475,0.37,0.125,0.5095,0.2165,0.1125,0.165,9
   ...: F,0.55,0.44,0.15,0.8945,0.3145,0.151,0.32,19
   ...: """
In [2]: txt=txt.splitlines()
genfromtxt
可以使用
dtype=None
加载它:

In [16]: data = np.genfromtxt(txt, delimiter=',', dtype=None)
In [17]: data
Out[17]: 
array([(b'M', 0.475, 0.37, 0.125, 0.5095, 0.2165, 0.1125, 0.165, 9),
       (b'F', 0.55, 0.44, 0.15, 0.8945, 0.3145, 0.151, 0.32, 19)], 
      dtype=[('f0', 'S1'), ('f1', '<f8'), ('f2', '<f8'), ('f3', '<f8'), ('f4', '<f8'), ('f5', '<f8'), ('f6', '<f8'), ('f7', '<f8'), ('f8', '<i4')])
In [18]: data['f0']
Out[18]: 
array([b'M', b'F'], 
      dtype='|S1')
In [19]: data['f3']
Out[19]: array([ 0.125,  0.15 ])
In [20]: 
f1
字段是一个二维形状数组(2,8)

np.loadtxt
也可以,但是它的
dtype
解释没有那么灵活。从
genfromtxt
示例复制
dtype
会产生相同的结果

 datal=np.loadtxt(txt,delimiter=',',dtype=data.dtype)

pandas
还有一个很好的csv阅读器,具有更高的速度和灵活性。如果您已经在使用pandas,这是一个很好的选择。

一个numpy矩阵只能保存一种类型的数据,而不是字符串和浮动两种:@StefanS在这种情况下,有没有办法将同质类型的2D列表转换为numpy矩阵?loadtxt有什么问题?错误,你不明白的结果?你期望或想要什么?第一列应该如何处理?numpy矩阵只能保存一种类型的数据,不能同时保存字符串和浮点:@StefanS在这种情况下,有没有办法将同质类型的二维列表转换为numpy矩阵?loadtxt有什么问题?错误,你不明白的结果?你期望或想要什么?第一列应该如何处理?