使用numpy库genfromtxt函数向python导入数据集(TXT文件)



我正在尝试学习python,但是我正在尝试导入数据集,并且无法正确工作...

此数据集包含16列和16个320行保存为TXT文件。我使用GenFromTXT函数如下:

import numpy as np  
dt=np.dtype([('name', np.str_, 16),('platform', np.str_, 16),('year', np.float_, (2,)),('genre', np.str_, 16),('publisher', np.str_, 16),('na_sales', np.float_, (2,)), ('eu_sales', np.float64, (2,)), ('jp_sales', np.float64, (2,)), ('other_sales', np.float64, (2,)), ('global_sales', np.float64, (2,)), ('critic_scores', np.float64, (2,)),('critic_count', np.float64, (2,)),('user_scores', np.float64, (2,)),('user_count', np.float64, (2,)),('developer', np.str_, 16),('rating', np.str_, 16)])  
data=np.genfromtxt('D:\data3.txt',delimiter=',',names=True,dtype=dt)

我得到此错误:

ValueError: size of tuple must match number of fields.

但是我的DT变量包含每列的16种类型。我指定数据类型,因为否则字符串被NAN替换。

任何帮助将不胜感激。

查看用您的dt制成的数组:

In [78]: np.ones((1,),dt)
Out[78]: 
array([ ('1', '1', [ 1.,  1.], '1', '1', [ 1.,  1.], [ 1.,  1.], [ 1.,  1.], 
      [ 1.,  1.], [ 1.,  1.], [ 1.,  1.], [ 1.,  1.], [ 1.,  1.], 
      [ 1.,  1.], '1', '1')], 
      dtype=[('name', '<U16'), ('platform', '<U16'), ('year', '<f8', (2,)), ('genre', '<U16'), ('publisher', '<U16'), ('na_sales', '<f8', (2,)), ('eu_sales', '<f8', (2,)), ('jp_sales', '<f8', (2,)), ('other_sales', '<f8', (2,)), ('global_sales', '<f8', (2,)), ('critic_scores', '<f8', (2,)), ('critic_count', '<f8', (2,)), ('user_scores', '<f8', (2,)), ('user_count', '<f8', (2,)), ('developer', '<U16'), ('rating', '<U16')])

i计数26 1 s(字符串和浮点),而不是您需要的16个。您是否认为(2,)表示双重?它表示一个2个元素子字段。

取出所有这些(2,)

In [80]: np.ones((1,),dt)
Out[80]: 
array([ ('1', '1',  1., '1', '1',  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., '1', '1')], 
      dtype=[('name', '<U16'), ('platform', '<U16'), ('year', '<f8'), ('genre', '<U16'), ('publisher', '<U16'), ('na_sales', '<f8'), ('eu_sales', '<f8'), ('jp_sales', '<f8'), ('other_sales', '<f8'), ('global_sales', '<f8'), ('critic_scores', '<f8'), ('critic_count', '<f8'), ('user_scores', '<f8'), ('user_count', '<f8'), ('developer', '<U16'), ('rating', '<U16')])

现在,我有16个字段,可以对您的16列正确解析。

,但通常dtype=None也有效。它使genfromtxt推断每个字段的最佳DTYPE。在这种情况下,它将从列标题行(您的names=True参数)中获取字段名称。

在将复杂的代码线扔入较大的脚本之前,测试复杂的代码线是一个好主意。尤其是在学习过程中。

相关内容

  • 没有找到相关文章

最新更新