numpy导入数据的错误形状并分离y值

时间:2014-01-25 00:37:43

标签: python csv numpy import-from-csv

我有一个大的csv文件~90k行和355列。前354列对应于不同单词的存在,显示1或0,最后一列显示数值。

例如:

table, box, cups, glasses, total
1,0,0,1,30
0,1,1,1,28
1,1,0,1,55

当我使用时:

d = np.recfromcsv('clean.csv', dtype=None, delimiter=',', names=True)
d.shape
# I get: (89460,)

所以我的问题是:

  1. 如何获得二维数组/矩阵?这有关系吗?
  2. 如何分隔'总'列,以便创建火车, cross_validation和测试集并训练模型?

2 个答案:

答案 0 :(得分:3)

np.recfromcsv会返回1维record array

如果您有结构化数组,则可以按字段标题访问列:

d['total']

返回总计列。

您可以使用整数索引访问行:

d[0]
例如,

返回第一行。


如果您希望选择除最后一行之外的所有列,那么最好使用2D普通NumPy数组。使用普通的NumPy数组(而不是结构化数组),您可以使用整数索引选择除最后一行之外的所有行:

您可以使用np.genfromtxt将数据加载到2D数组中:

import numpy as np

d = np.genfromtxt('data', dtype=None, delimiter=',', skiprows=1)
print(d.shape)
# (3, 5)
print(d)
# [[ 1  0  0  1 30]
#  [ 0  1  1  1 28]
#  [ 1  1  0  1 55]]

这选择最后一栏:

print(d[:,-1])
# [30 28 55]

这会选择除最后一列之外的所有内容:

print(d[:,:-1])
# [[1 0 0 1]
#  [0 1 1 1]
#  [1 1 0 1]]

答案 1 :(得分:0)

好的经过谷歌搜索和时间浪费这是任何人试图让numpy一路走开,以便他们可以阅读CSV并继续Scikit Learn需要做的事情:

# Say your csv file has 10 columns, 1-9 are features and 10 
# is the Y you're trying to predict.
cols = range(0,10)
X = np.loadtxt('data.csv', delimiter=',', dtype=float, usecols=cols, ndmin=2, skiprows=1)
Y = np.loadtxt('data.csv', delimiter=',', dtype=float, usecols=(9,), ndmin=2, skiprows=1)
# note how for Y the usecols argument only takes a sequence, 
# even though I only want 1 column I have to give it a sequence.