我试图从csv文件中提取数据,并在Python中使用matplotlib在程序中绘制它。csv文件是3列,中间两列之间有一个空格,我试图将每列排序到列表中,但它告诉我两列的列表索引超出范围。
我尝试过各种各样的修改,并尝试使用字典,但我对python的能力不是很好,因为我对它不是很熟悉。
这是我的代码中剩下的内容
import matplotlib.pyplot as plt
import csv
plt.grid(which='major')
plt.xlim(140,300)
plt.ylim(0,90)
plt.ylabel(r'Altitude [km]')
plt.xlabel('Temperature [K]')
ALT = []
T = []
with open('atmoprofile.csv','r') as csvfile:
lines = csv.reader(csvfile)
for col in lines:
T.append((col[0]))
ALT.append((col[2]))
print(ALT)
print(T)
plt.plot(T,ALT, color = 'm' , marker = '.')
plt.savefig('FIG3.1.png',dpi=300)
并且误差如下
line 19, in <module>
T.append((col[2]))
IndexError: list index out of range
这是一些csv文件
0.0000000000000000 295.38598510303814 2.1301675254755913E-002
0.50000000000000000 293.34076715919269 1.8661556016220760E-002
1.0000000000000000 291.26698316703533 1.6456139406729336E-002
1.5000000000000000 289.15220287599828 1.4345195644685916E-002
2.0000000000000000 286.97824981214990 1.2453493432569643E-002
2.5000000000000000 284.76134910419995 1.0778799478271171E-002
3.0000000000000000 282.47997944552532 9.1857871206039686E-003
3.5000000000000000 280.14277632253931 7.8700783601433066E-003
4条答案
按热度按时间a8jjtwal1#
有没有办法检查为什么我得到一个索引超出范围的错误?
是的。你可以在循环中添加一个
print(col)
,看看它实际上是什么样子,里面有多少个元素。pvabu6sv2#
csv.reader
允许您指定分隔符。在您的情况下,这将只是一个空格。所以你的代码的第19行应该是:
lines = csv.reader(csvfile, delimiter=' ')
更多详情请看这里:https://docs.python.org/3/library/csv.html#csv.reader
soat7uwm3#
您的代码将
delimiter=' '
添加到csv.reader
行,并使用该数据不会产生所声称的错误。然而,仍然存在错误的是,数据应转换为float
,并且x和y限制设置不正确,无法查看提供的数据。我只是将它们注解掉。下面使用所示的示例数据:输出:
x3naxklr4#
这里的主要问题是
csv.reader
返回一个字符串列表:csv.reader
(csvfile, dialect='excel', **fmtparams
):**从csv文件读取的每一行都以字符串列表的形式返回。**除非指定QUOTE_NONUMERIC格式选项,否则不会执行自动数据类型转换(在这种情况下,未加引号的字段将转换为浮点数)。
对于
float
类型转换,我会这样做:输出: