Python代码中genfromtxt处理缺失列

1 投票
3 回答
5349 浏览
提问于 2025-04-17 17:10

输入的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]])

这是因为数据中有缺失值,所以这样处理是对的。

撰写回答