我有一个.csv文件,它有3列,看起来像这样。
-10.5,7.79,0
-10.5,8.37,0
-10.5,9.52,0
-10.5,10.10,0
-10.5,11.25,0
我想将第1列中的数字指定给变量数组'x',将第2列指定为'y',将第3列指定为'z'。这样我就可以绘制一个3D图形了。我到目前为止的初始代码如下,
import csv
ifile = open('new.csv', "rb")
reader = csv.reader(ifile)
for row in reader:
writer.writerow(row)
ifile.close()
fig = plt.figure()
axis = fig.gca(projection='3d')
axis.plot_trisurf(x, y, z)
plt.show()
但是我无法在以下变量数组中分配这些数字。亲切的,请帮我分配这些变量数组中.csv文件中的数据。
答案 0 :(得分:3)
你可以这样做,
import csv
ifile = open('new.csv', "rb")
reader = csv.reader(ifile)
x = []
y = []
z = []
for row in reader:
x.append(float(row[0]))
y.append(float(row[1]))
z.append(float(row[2]))
ifile.close()
或者更好的方法就是,
with open('new.csv', "r") as ifile:
reader = csv.reader(ifile, delimiter=',')
for row in reader:
x.append(float(row[0]))
y.append(float(row[1]))
z.append(float(row[2]))
这将在操作后关闭文件。
答案 1 :(得分:1)
尝试使用我的库pyexcel
>>> import pyexcel as pe
>>> sheet=pe.load("csv-import.csv")
>>> sheet
Sheet Name: csv-import.csv
+---------+--------+---+
| -10.500 | 7.790 | 0 |
+---------+--------+---+
| -10.500 | 8.370 | 0 |
+---------+--------+---+
| -10.500 | 9.520 | 0 |
+---------+--------+---+
| -10.500 | 10.100 | 0 |
+---------+--------+---+
| -10.500 | 11.250 | 0 |
+---------+--------+---+
>>> sheet.column.format([0,1], float)
>>> sheet.column.format(2, int)
>>> sheet[0,0]
-10.5
>>> type(sheet[0,0])
<type 'float'>
>>> x = sheet.column[0]
>>> y = sheet.column[1]
>>> z = sheet.column[2]
>>> x
[-10.5, -10.5, -10.5, -10.5, -10.5]
>>> y
[7.79, 8.37, 9.52, 10.1, 11.25]
>>> z
[0, 0, 0, 0, 0]
答案 2 :(得分:0)
row
中的每个reader
都会为您提供这些值的列表。在for循环中,您可以编写(x, y, z) = row
,然后绘制新点。
如果您需要x来保存所有x等的列表,您可以添加,例如循环中Xs.append(x)
,其中Xs
预先初始化为空列表。
答案 3 :(得分:0)
尝试使用numpy。
import numpy as np
x, y, z = np.loadtxt('new.csv', delimiter=',', unpack=True)