Python代码中genfromtxt处理缺失列
输入的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根据选定的列进行相关性分析呢?
3 个回答
0
在我的情况下,我的数据里有一个特殊字符#,这导致了问题。
举个例子:
a,b#,c,d,e
1,2,3,4,2
解决办法:
我把注释的字符改了,我把它改成了:@@@
dataset = genfromtxt(open(file,'r'), delimiter=',', dtype='f8',
comments='@@@@')[1:]
0
你可以让它忽略那些列数少的行(使用genfromtxt导入带有缺失值的csv数据到numpy),但是你不能让它把这些行当作不完整的来解析。如果你把分隔符放好(比如说 1,2,,,
),它是可以工作的,但我觉得 genfromtxt
可能没有足够聪明来满足你的需求。
不过,你可以很容易地自己实现这个功能,使用 csv
模块就可以了。
2
既然你提到 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]])
这是因为数据中有缺失值,所以这样处理是对的。