我目前有一个大约有 350 行和 50 列的 csv 文件,我想访问其中的四列。使用genfromtxt
,我能做到这一点。但是,一旦有了这些列,我想根据现有列添加一个新列(即 newcol=abs(col1-col2)
)。然而,当我这样做时,我收到错误: too many indices for array
.
这是我的代码:
import numpy as np
thedata = np.genfromtxt(
'match_roughgraphs.csv',
skip_header=0,
skip_footer=0,
delimiter=',',
usecols=(3,4,29,30),
names=['hubblera','hubbledec','sloanra','sloandec'])
for row in thedata:
print(row)
b=np.empty(350,1)
b=np.absolute(thedata[:,0]-thedata[:,1]) #returns too many indices error
print(thedata[0,0]) #also returns too many indices error
print(thedata[0]) #prints out first row
根据上面最后两行,我尝试过的测试,我假设 genfromtxt()
正在加载 csv 文件,以便所有数据都保存在一列中,并用字符串逗号而不是分隔符逗号分隔。关于如何解决这个问题有什么建议吗?
最佳答案
我认为您的代码不起作用的原因是 numpy.genfromtxt 返回元组的一维数组或更具体的结构化 ndarray。读这个numpy.genfromtxt produces array of what looks like tuples, not a 2D array—why? 因此,您可以修复参数或将这些元组转换为数组,以获取 2D 数组形式的数据。 当您使用 name 参数时,它会返回一个结构化的 ndarray,删除此参数,它将返回一个 2D 数组。 正如您在此处命名的列,您可以这样做
b=np.absolute(thedata['hubblera']-thedata['hubbledec'])
另外thedata[0,0]
这会返回错误,因为没有二维数组尝试执行thedata[0][0]
关于python - 操作 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37570790/