如何在pandas DataFram中按索引只保留一组特定的行

2024-05-23 20:24:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过对.fits文件执行以下操作创建了一个数据帧:

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列的数据帧。我只想根据特定的索引来保存行,我想例如,做这样的事情:

^{pr2}$

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

我用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]])

有什么想法可以更好地做到这一点,最好只使用熊猫?在


Tags: 数据keyinobjfieldfordatadict
1条回答
网友
1楼 · 发布于 2024-05-23 20:24:01

这将实现以下目的:

gooddf.loc[indices]

需要注意的是:.iloc和{}做的事情稍有不同,这就是为什么您可能会得到意想不到的结果。在

您可以更深入地阅读索引here,但要理解的关键是.iloc根据指定的位置返回行,而.loc根据指定的索引标签返回行。因此,如果索引没有排序,.loc和{}的行为将不同。在

相关问题 更多 >