分配从 csv 导入的变量
Assign variables imported from csv
我有一个 .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 文件中的数据分配给这些变量数组。
reader
中的每个 row
都会为您提供这些值的列表。在那个 for 循环中,您可以编写 (x, y, z) = row
,然后绘制您的新点。
如果您需要 x 来保存所有 x 等的列表,您可以只追加,例如Xs.append(x)
在循环中,其中Xs
提前初始化为空列表
尝试使用 numpy。
import numpy as np
x, y, z = np.loadtxt('new.csv', delimiter=',', unpack=True)
你可以这样做,
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]))
这将在操作后关闭文件。
尝试使用我的图书馆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]
我有一个 .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 文件中的数据分配给这些变量数组。
reader
中的每个 row
都会为您提供这些值的列表。在那个 for 循环中,您可以编写 (x, y, z) = row
,然后绘制您的新点。
如果您需要 x 来保存所有 x 等的列表,您可以只追加,例如Xs.append(x)
在循环中,其中Xs
提前初始化为空列表
尝试使用 numpy。
import numpy as np
x, y, z = np.loadtxt('new.csv', delimiter=',', unpack=True)
你可以这样做,
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]))
这将在操作后关闭文件。
尝试使用我的图书馆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]