在np.where和for循环内重新编制索引错误

时间:2019-07-19 20:17:32

标签: python arrays pandas indexing astronomy

我有一个带有1200个对象的大型CSV表。我通过设置某些参数(仅某些距离等)将它们缩小为326个对象的体积有限的样本(VLS)。 在此VLS中,我使用一个for循环来计算特定类型对象的数量。我不想一次计算整个VLS,而是将其计入“部分”(想在散点图上绘制框并计算每个框中的值)。

我非常确定我的问题是由于熊猫在CSV表的列中读取的方式以及我无法与“ dtype:object”的列交谈的“ b​​ox”数组造成的。

我不希望有人对此有一个完美的解决方法,但是即使向我指出有关熊猫的一些特定且相关的信息也会有所帮助和赞赏。我尝试阅读有关熊猫的文档,但是我不太了解。

如果相关,这就是我在CSV表和列中的读取方式:

file = pd.read_csv(r'~/Downloads/CSV')
#more columns than this, but they're all defined like this in my code
blend = file["blend"] 
dec = file["dec"] 

当我在要查看的部分的定义(称为“ box”)中定义我的VLS时,代码确实起作用,并且for循环正确计数对象。 这是它工作时的样子:

color = np.array([-1,0,1])

for i in color:
    box1 = np.where((constant box parameters) & (variable par >= i)& 
  (variable par < i+1) &('Volume-limited parameters I wont list'))[0] 
    binaries = np.where(blend[box1].str[:1].eq('Y'))[0]
    candidates = np.where(blend[box1].str[0].eq('?'))[0]
    singles = np.where(blend[box1].str[0].eq('N'))[0]
    print ("from", i, "to", i+1, "there are", len(binaries), "binaries,", len(candidates), "candidates,", len(singles), "singles.")

# Correct Output:
"from -1 to 0 there are 7 binaries, 1 candidates, 78 singles."
"from 0 to 1 there are 3 binaries, 1 candidates, 24 singles."
"from 1 to 2 there are 13 binaries, 6 candidates, 69 singles."

问题是,我不想在“ box”的np.where()中包含VLS的参数。这就是我希望代码看起来的样子:

vollim = np.where((dec >= -30)&(dec <= 60) &(p_anglemas/err_p_anglemas 
                            >= 5) &(dist<=25) &(err_j_k_mag < 0.2))[0]

j_k_mag_vl = j_k_mag[vollim]
abs_jmag_vl = abs_jmag[vollim]
blend_vl = blend[vollim]
hires_vl = hires[vollim]

#%%
color = np.array([-1,0,1])

for i in color:
    box2 = np.where((abs_jmag_vl >= 13)&(abs_jmag_vl <= 16) & 
                            (j_k_mag_vl >= i)&(j_k_mag_vl < i+1))[0] 
    binaries = np.where(blend_vl[box2].str[:1].eq('Y'))[0]
    candidates = np.where(blend_vl[box2].str[0].eq('?'))[0]
    singles = np.where(blend_vl[box2].str[0].eq('N'))[0]
    print ("from", i, "to", i+1, "there are", len(binaries), "binaries,", len(candidates), "candidates,", len(singles), "singles.")

#Wrong Output:
"from -1 to 0 there are 4 binaries, 1 candidates, 22 singles."
"from 0 to 1 there are 1 binaries, 0 candidates, 5 singles."
"from 1 to 2 there are 4 binaries, 0 candidates, 14 singles."

当我打印blend_vl [box2]时,blend_vl的许多元素已从其常规字符串更改为我不理解的“ NaN”。

当我打印box1和box2时,它们的长度相同,但是索引不同。

如果将blend_vl更改为平面数组,我认为blend_vl [box2]可以正常工作吗?

我知道这一次有很多信息,但是我很感谢任何输入。即使只是有关如何使用熊猫和数组的更多信息。 TIA!

0 个答案:

没有答案