python - 如何在 pandas DataFrame 中按索引仅保留一组特定行

标签 python pandas astronomy

我通过对 .fits 文件进行以下操作创建了一个 DataFrame:

data_dict= dict()
for obj in sortedpab:
    for key in ['FIELD', 'ID',  'RA' , 'DEC' , 'Z_50', 'Z_84','Z_16' , 'PAB_FLUX', 'PAB_FLUX_ERR']:
        data_dict.setdefault(key, list()).append(obj[key])

gooddf = pd.DataFrame(data_dict)
gooddf['Z_ERR']= ((gooddf['Z_84'] - gooddf['Z_50']) + (gooddf['Z_50'] - gooddf['Z_16'])) / (2 * 
gooddf['Z_50'])
gooddf['OBS_PAB'] = 12820 * (1 + gooddf['Z_50'])
gooddf.loc[gooddf['FIELD'] == "ERS" , 'FIELD'] = "ERSPRIME"
gooddf = gooddf[['FIELD' , 'ID' , 'RA' , 'DEC' , 'Z_50' , 'Z_ERR' , 'PAB_FLUX' , 'PAB_FLUX_ERR' , 
'OBS_PAB']]
gooddf = gooddf[gooddf.OBS_PAB <= 16500]

这给了我一个包含 351 行和 9 列的 DataFrame。我想仅根据某些索引保留行,并且我想例如做这样的事情:

indices = [5 , 6 , 9 , 10]
gooddf = gooddf[gooddf.index == indices]

我希望它只保留数组索引中列出的索引值的行,但这给我带来了问题。

我找到了一种使用 for 循环来做到这一点的方法:

good = np.array([5 , 6 , 9 , 12 , 14 , 15 , 18 , 21 , 24 , 29 , 30 , 35 , 36 , 37 , 46 , 48 ])

gooddf50 = pd.DataFrame()
for i in range(len(good)):
    gooddf50 = gooddf50.append(gooddf[gooddf.index == good[i]])

关于如何以更好的方式做到这一点有什么想法,最好只使用 pandas?

最佳答案

这就能解决问题:

gooddf.loc[indices]

重要提示:.iloc.loc 所做的事情略有不同,这就是为什么您可能会得到意外结果的原因。

您可以更深入地了解索引的详细信息 here ,但要理解的关键是 .iloc 根据指定的 positions 返回行,而 .loc 根据 positions 返回行>指定索引标签。因此,如果您的索引未排序,.loc.iloc 的行为将会有所不同。

关于python - 如何在 pandas DataFrame 中按索引仅保留一组特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58493771/

相关文章:

python - 从Python中的子文件夹导入本地模块时出现ModuleNotFoundError

python - 将尾随字符替换为另一个字符

python - pandas groupby apply 返回数据框

python - 定义和绘制 Schechter 函数 : plot problems

python - 如何从astropy erfa中取出WGS84轴

python - 如何恢复 pip freeze >requirements.txt?

python - SQLite 3 python

python - 如何添加根据现有日期列和标准列计算的数据框日期列?

python - 使用 read_xml 将数据从两个 XML 父节点导入到 Pandas DataFrame

python - 如何使用 Python 将 TESScut 中的一颗星绘制到天空中的正确位置(而不是大约 10 度的误差)?