我有一个包含24列x 514rows数据的.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的完全新手,非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
另外,我一直试图找出如何在.csv文件中为每列提供标题。因此,我可以在绘图时调用该特定列的名称,而不是计算列号。有没有办法做到这一点?
要在数组名称中添加列,您需要将其设为structured array。
这是一个简单的例子:
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=True
中设置np.genfromtxt
,那么Numpy会自动为您创建一个具有正确名称的结构化数组。