python代码中的genfromttxt中缺少的列



输入csv文件:

a,b,c,d,e
1,2,3,4,2
3,4,5,6,3
3,4,5
1,2

代码:

import numpy as np
data = np.genfromtxt("sa.csv", dtype=None, delimiter=',', names=True)
print data['a'],data['b'],data['e']

我会得到一个错误

Traceback (most recent call last):
  File "cs.py", line 3, in <module>
    data = np.genfromtxt("sa.csv", dtype=None, delimiter=',', names=True)
  File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 1593, in genfromtxt
    raise ValueError(errmsg)
ValueError: Some errors were detected !
    Line #4 (got 3 columns instead of 5)
    Line #5 (got 2 columns instead of 5)

如何处理这一问题,并使用python中的statsmodels基于所选列执行关联??

既然您提到了statsmodels,我假设您已经安装了它的pandas依赖项。Pandas将正确解析您的示例:

import pandas as pd
import numpy as np
dat = pd.read_csv('test.csv')
np.corrcoef(dat)
array([[ 1.        ,  0.94174191,         nan,         nan],
       [ 0.94174191,  1.        ,         nan,         nan],
       [        nan,         nan,         nan,         nan],
       [        nan,         nan,         nan,         nan]])

考虑到缺失的值,这是正确的。

您可以让它忽略列数较少的行(使用genfromttxt导入numpy中缺少值的csv数据(,但不能让它将其解析为不完整。如果你把分隔符放在适当的位置(即1,2,,,(,它可以工作,但除此之外,我认为genfromtxt不够聪明,不能做你想做的事。

不过,您可以使用csv模块轻松地自己实现它。

在我的情况下,我的数据中有一个特殊字符#,这是导致问题的原因。示例:

a,b#,c,d,e
1,2,3,4,2

解决方案:

更改注释字符,我将其更改为:@@@

dataset = genfromtxt(open(file,'r'), delimiter=',', dtype='f8',
comments='@@@@')[1:]

相关内容

  • 没有找到相关文章

最新更新