python - 如何在 pandas DataFrame 中按索引仅保留一组特定的行
问题描述
我通过对 .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]])
关于如何以更好的方式做到这一点的任何想法,最好只使用熊猫?
解决方案
这可以解决问题:
gooddf.loc[indices]
重要说明:.iloc
并且.loc
正在做的事情略有不同,这就是为什么您可能会得到意想不到的结果。
您可以在此处深入了解索引的详细信息,但要了解的关键是.iloc
根据指定的位置返回行,而.loc
根据指定的索引标签返回行。因此,如果您的索引未排序,.loc
并且.iloc
行为会有所不同。
推荐阅读
- python - Tesseract OCR 准确性对图像中文本数量的依赖性
- php - 有没有办法从 laravel 中删除 algolia/scout?
- gatsby - Google 自定义搜索框不会在我的 Gatsby 项目中首次加载时出现,仅在重新加载或刷新时出现
- python - SyntaxError: 'break' outside loop,这是显示的错误
- html - 如果表格行到达页面末尾,则创建新的 DIN A4
- python - 如何在下面的条形图中删除额外的 X 标签?
- .net-core - .net 核心 API 中的混合身份验证
- python - 如何从dict中的值列表中获取每个值
- oracle - 尝试使用 11g 表单创建饼图时遇到问题
- javascript - 在主线程上创建图像位图?