3

我有一个包含 24 列 x 514 行数据的 .csv 文件。这些列中的每一列代表不同的参数,我希望研究不同参数之间的趋势。

我正在使用 genfromtxt 将数据导入为一个 numpy 数组,这样我就可以绘制两个特定列的值(例如第 9 列和第 11 列)。这是我到目前为止所拥有的:

import matplotlib.pyplot as plt
import numpy as np


data = np.genfromtxt('output_burnin.csv', delimiter=',')

impactparameter=data[:,11]
planetradius=data[:,9]

plt.plot(planetradius,impactparameter,'bo')

plt.title('Impact Parameter vs. Planet Radius')
plt.xlabel('R$_P$/R$_Jup$')
plt.ylabel('b/R$_star$')

plt.show()

使用此代码,我在第 12 行遇到错误:

    impactparameter=data[:,11]
IndexError: too many indices

这里可能有什么问题?

另外,我一直在试图弄清楚如何在 .csv 文件中为每一列提供一个标题。因此,我可以在绘图时调用该特定列的名称,而不是计算列号。有没有办法做到这一点?

我是Python的新手,任何帮助将不胜感激,谢谢!

4

1 回答 1

0

另外,我一直在试图弄清楚如何在 .csv 文件中为每一列提供一个标题。因此,我可以在绘图时调用该特定列的名称,而不是计算列号。有没有办法做到这一点?

要在数组名称中给出列,您需要将其设为结构化数组

这是一个简单的例子:

a = np.zeros(5, dtype='f4, f4, f4')
a.dtype.names = ('col1', 'col2', 'col3')
print a[0]  # prints [0, 0, 0], the first row (record)
print a['col1']  # prints [0, 0, 0, 0, 0], the first column

如果您在 CSV 文件的开头有列名,并设置names=Truenp.genfromtxt,那么 Numpy 将自动为您创建一个具有正确名称的结构化数组。

于 2014-10-29T18:32:34.063 回答