输入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:]