【问题标题】:retrieving columns from an array of lists in python从python中的列表数组中检索列
【发布时间】:2013-10-12 01:07:42
【问题描述】:

我有以下几行代码:

import numpy as np
data = np.genfromtxt(path...,delimiter=',',dtype=None)

这将返回一个列表数组。有没有一种简单的方法可以从 csv 中获取矩阵,以便我可以使用 data[:,:3] 之类的操作来获取矩阵的前 3 列?

我已尝试 (data[1])[:3] 获取第二行的前 3 个条目,但出现以下错误:

无效索引

我真的很困惑,因为如果我只是从文件中复制第二行然后执行 (copydata)[:3] 一切正常。

所以我的问题分为两部分:

  1. 我可以将 csv(包含字符串和数字)作为数组导入吗?
  2. 为什么 (data[1])[:3] 返回无效索引

【问题讨论】:

  • 我相信 data.shape 返回嵌套数组的维度。所以这里它会返回 (行数, ),因为这个数组的条目是列表而不是数组。现在我写 (stuff[1])[:3] 的信念是某事[index] 已超载。括号内的 [1] 作用于一个数组,而外的 [:3] 作用于一个列表。 (我故意这样做是因为我不认为 [1,:3] 作用于有意义的对象(由于形状的行为方式)。

标签: python arrays csv numpy


【解决方案1】:

所以这是 1 的答案

import numpy as np
data = np.genfromtxt(path...,delimiter=',',dtype=None)

data = []  
with open(path,'rb') as file:
    reader = csv.reader(file)
    for row in reader:
        data[len(data):] = [row]

data = np.array(data)

但我仍然对第 2 部分感到烦恼

【讨论】:

  • 数据的形状是什么?
  • 原始帖子中的代码是 (4177,) 而我的回复是 (4177,8)
【解决方案2】:

您的数据是什么样的?也许你应该使用 np.loadtxt()。
CSV 文件:

0,1,2,3,4,5,6,7,8,9
10,11,12,13,14,15,16,17,18,19
20,21,22,23,24,25,26,27,28,29
30,31,32,33,34,35,36,37,38,39
40,41,42,43,44,45,46,47,48,49
50,51,52,53,54,55,56,57,58,59
60,61,62,63,64,65,66,67,68,69
70,71,72,73,74,75,76,77,78,79
80,81,82,83,84,85,86,87,88,89
90,91,92,93,94,95,96,97,98,99

加载到数组中并对其进行索引:

>>> a = np.loadtxt('data.csv', delimiter = ',')
>>> a
array([[  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.],
       [ 10.,  11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.],
       [ 20.,  21.,  22.,  23.,  24.,  25.,  26.,  27.,  28.,  29.],
       [ 30.,  31.,  32.,  33.,  34.,  35.,  36.,  37.,  38.,  39.],
       [ 40.,  41.,  42.,  43.,  44.,  45.,  46.,  47.,  48.,  49.],
       [ 50.,  51.,  52.,  53.,  54.,  55.,  56.,  57.,  58.,  59.],
       [ 60.,  61.,  62.,  63.,  64.,  65.,  66.,  67.,  68.,  69.],
       [ 70.,  71.,  72.,  73.,  74.,  75.,  76.,  77.,  78.,  79.],
       [ 80.,  81.,  82.,  83.,  84.,  85.,  86.,  87.,  88.,  89.],
       [ 90.,  91.,  92.,  93.,  94.,  95.,  96.,  97.,  98.,  99.]])
>>> a[1]
array([ 10.,  11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.])
>>> a[1][:3]
array([ 10.,  11.,  12.])
>>> a[1,:3]
array([ 10.,  11.,  12.])
>>> 

【讨论】:

  • 矩阵中有文本和字符串,loadtxt 会混淆类型。我想我应该提到这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 2023-03-26
  • 2015-08-24
  • 1970-01-01
  • 2020-04-22
相关资源
最近更新 更多