Python 使用制表符分隔符读取csv会产生错误

Python 使用制表符分隔符读取csv会产生错误,python,csv,numpy,io,tab-delimited,Python,Csv,Numpy,Io,Tab Delimited,我有一个CSV文件,它使用“\t”选项卡作为分隔符。它包含5列。我试过这个: import numpy as np #b=np.loadtxt(r'train_set.csv',dtype=str,delimiter=' ') my_data = np.genfromtxt('train_set.csv', delimiter='\t') print my_data 但我得到了以下错误: Traceback (most recent call last): File "./wordClo

我有一个CSV文件,它使用“\t”选项卡作为分隔符。它包含5列。我试过这个:

import numpy as np 
#b=np.loadtxt(r'train_set.csv',dtype=str,delimiter=' ')
my_data = np.genfromtxt('train_set.csv', delimiter='\t')
print my_data
但我得到了以下错误:

Traceback (most recent call last):
  File "./wordCloud.py", line 7, in <module>
    my_data = np.genfromtxt('train_set.csv', delimiter='\t')
  File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 1667, in genfromtxt
    raise ValueError(errmsg)
ValueError: Some errors were detected !
    Line #14 (got 4 columns instead of 5)
    Line #21 (got 4 columns instead of 5)
    Line #135 (got 4 columns instead of 5)
那么我没有得到任何错误,但输出是:

[ nan  nan  nan ...,  nan  nan  nan]

答案给出了以下警告:

...
    Line #26310 (got 4 columns instead of 5)
    Line #26383 (got 4 columns instead of 5)
    Line #26448 (got 4 columns instead of 5)
    Line #26489 (got 4 columns instead of 5)
    Line #26589 (got 4 columns instead of 5)
    Line #26593 (got 4 columns instead of 5)
    Line #26888 (got 4 columns instead of 5)
    Line #27002 (got 4 columns instead of 5)
    Line #27065 (got 4 columns instead of 5)
    Line #27234 (got 3 columns instead of 5)
    Line #27327 (got 4 columns instead of 5)
    Line #27418 (got 4 columns instead of 5)
    Line #27594 (got 4 columns instead of 5)
    Line #27827 (got 4 columns instead of 5)
    Line #27944 (got 4 columns instead of 5)
    Line #28074 (got 4 columns instead of 5)
    Line #28102 (got 4 columns instead of 5)
    Line #28147 (got 4 columns instead of 5)
    Line #28224 (got 4 columns instead of 5)
    Line #28264 (got 4 columns instead of 5)
    Line #28344 (got 4 columns instead of 5)
    Line #28484 (got 4 columns instead of 5)
  warnings.warn(errmsg, ConversionWarning)
输出得到一些奇怪的字符,比如:

costing at least \xc2\xa3429
代替成本至少为429英镑的

您可以检查csv文件的第14行、第21行和第135行吗? 正如错误所述,这些行不包含5列(全部包含4列)

如果第5列假定为空,只需在末尾插入
\t
字符即可

查看您的数据,可能这就是您想要的:

my_data = np.genfromtxt('train_set.csv', delimiter='\t',
                        invalid_raise=False, skip_header=1,
                        dtype=None)
invalid_raise
:这将跳过无效行(#14、21和135)。请再检查一下。(在Libre Office中:使用“另存为”)

skip_header
:名称本身就说明了问题

dtype
:应为
None
,以便每列的数据类型由该列的内容确定。

您可以检查csv文件的第14、21和135行吗? 正如错误所述,这些行不包含5列(全部包含4列)

如果第5列假定为空,只需在末尾插入
\t
字符即可

查看您的数据,可能这就是您想要的:

my_data = np.genfromtxt('train_set.csv', delimiter='\t',
                        invalid_raise=False, skip_header=1,
                        dtype=None)
invalid_raise
:这将跳过无效行(#14、21和135)。请再检查一下。(在Libre Office中:使用“另存为”)

skip_header
:名称本身就说明了问题


dtype
:应为
None
,以便每个列的数据类型由该列的内容确定。

我也有同样的问题。我的数据是正确的(见下文),但numpy报告此类错误:

行#11787(得到4列而不是11列)

行#11838(由11列改为3列)

我使用python加载数据,然后转换为numpy。所以不是

tabOryg=numpy.genfromtxt(fn,dtype='str',delimiter='\t')

我做到了:

    datas = [i.split('\t')  for i in open(fn) ]
    tabOryg = numpy.array(datas, dtype='str')

它是有效的。我想知道genfromtxt有什么问题。

我也有同样的问题。我的数据是正确的(见下文),但numpy报告此类错误:

行#11787(得到4列而不是11列)

行#11838(由11列改为3列)

我使用python加载数据,然后转换为numpy。所以不是

tabOryg=numpy.genfromtxt(fn,dtype='str',delimiter='\t')

我做到了:

    datas = [i.split('\t')  for i in open(fn) ]
    tabOryg = numpy.array(datas, dtype='str')

它是有效的。我想知道genfromtxt有什么问题。

您提到的所有行都有第5列。我在Libre Office中选择了tab作为分隔符,现在它显示得很好,所以我可以说数据集是正确的。(我更新了截图)。Libre办公室在这方面相对宽容。尝试在文本编辑器中打开文件。在RealeOffice中,转到上述行的空白单元格,在其中输入一些内容,然后删除这些值,然后保存。然后试试代码。我也用gedit打开了,但是一列包含很多单词,因此我看不到太多。Libre Office不包含空列。请确定CSV有问题。在gedit中,搜索
\t
。第14行末尾不应该有任何突出显示,等等-这意味着没有
\t
。但前几行也是如此,我不知道发生了什么。你提到的所有行都有第5列。我在Libre Office中选择了tab作为分隔符,现在它显示得很好,所以我可以说数据集是正确的。(我更新了截图)。Libre办公室在这方面相对宽容。尝试在文本编辑器中打开文件。在RealeOffice中,转到上述行的空白单元格,在其中输入一些内容,然后删除这些值,然后保存。然后试试代码。我也用gedit打开了,但是一列包含很多单词,因此我看不到太多。Libre Office不包含空列。请确定CSV有问题。在gedit中,搜索
\t
。第14行末尾不应该有任何突出显示,等等-这意味着没有
\t
。但前几行也是如此,我不知道发生了什么。