使用Python专门绘制csv文件的每一行

时间:2016-12-20 21:15:01

标签: python csv numpy matplotlib multidimensional-array

我有一个像这样组织的CSV文件:

1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12

使用numpy我在变量 x 中使用 genfromtxt 存储文件。因此x的每一行都是CSV文件的一行,而x是一个ndarray对象。

我想绘制数据如此:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

为了澄清数据当前正在绘制如(0,1)和(0,5),因为每一行都是一个新数组,索引会在每个新行的开头重置。

我想绘制它,所以点数是(0,1)和(4,5),而不是

我的尝试是在for循环中追加或连接行,但似乎ndarray类型没有这些方法。

感谢您的阅读!

2 个答案:

答案 0 :(得分:0)

使用csv模块和双列表理解,您可以非常简单地构建一个numpy数组:

with open("input.csv") as f:
    cr = csv.reader(f)
    vector = np.array([int(x) for row in cr for x in row])

让我们打印vector

[ 1  2  3  4  5  6  7  8  9 10 11 12]

答案 1 :(得分:0)

使用行列表模拟csv文件:

In [1]: txt=b"""1, 2, 3, 4
   ...: 5, 6, 7, 8
   ...: 9, 10, 11, 12"""
In [2]: txt = txt.splitlines()
In [3]: txt
Out[3]: [b'1, 2, 3, 4', b'5, 6, 7, 8', b'9, 10, 11, 12']

加载genfromtxt我得到一个二维数组

In [4]: x = np.genfromtxt(txt, delimiter=',', dtype=int)
In [5]: x
Out[5]: 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
In [6]: x.shape
Out[6]: (3, 4)

这样的数组可以很容易地重新整形为flat 1d数组:

In [7]: x1 = x.ravel()
In [8]: x1
Out[8]: array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
In [9]: x.reshape(12)
Out[9]: array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

反过来也很简单:

创建一个具有相同值的1d数组,并将其重新整形为(3,4)数组(或(4,3)或(2,6)等):

In [10]: y = np.arange(1,13)
In [11]: y
Out[11]: array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
In [12]: y.reshape(3,4)
Out[12]: 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])