如何使用Astropy筛选ASCII表中指定条件的行
问题描述
我正在处理一份ASCII数据集,需要移除部分行,当前使用Astropy工具,代码及数据集预览如下:
from astropy.io import ascii gw170817 = ascii.read('gw170817_afterglow_data_full.txt')
数据集预览:
Table length=215 DateUT T Telescope Freq FluxD FluxDErr str24 float64 str10 float64 str7 float64 2017-Aug-18.10 0.57 VLA 9700000000.0 <144 -- 2017-Aug-18.1 0.6 Swift 2.41e+17 <7.8e-3 -- 2017-Aug-18.21 0.68 ATCA 8500000000.0 <120 -- 2017-Aug-18.21 0.68 ATCA 10500000000.0 <150 -- 2017-Aug-18.2 0.7 NuSTAR 1.2e+18 <7.3e-4 -- 2017-Aug-18.46 0.93 uGMRT 610000000.0 <195 -- 2017-Aug-18.5 1.0 Swift 2.41e+17 <7.5e-2 -- 2017-Aug-18.6 1.1 Swift 2.41e+17 <5.0e-3 -- 2017-Aug-18.95 1.43 ALMA 339000000000.0 <126 -- 2017-Aug-18.97 1.44 VLA 10000000000.0 <13.8 -- ... ... ... ... ... ... 2019-Sep-21--27 767.0 VLA 3000000000.0 4.90e0 1.8 2020-Mar-13 938.0 Chandra 2.41e+17 1.30e-4 5.23e-05 2020-Nov-14 1185.0 ATCA 2100000000.0 <51 -- 2021-Feb-20 1283.0 ATCA 2100000000.0 <75 -- 2021-Apr-06 1328.0 ATCA 2100000000.0 <54 -- 2021-Apr-08 1330.0 ATCA 5500000000.0 <44 -- 2021-Apr-08 1330.0 ATCA 9000000000.0 <31 -- 2020-Dec-09--2021-Jan-27 1231.0 Chandra 2.41e+17 1.70e-4 4.7e-05 2020-Sep-19--2021-Feb-08 1228.0 VLA 3000000000.0 2.86e0 0.99 2020-Feb-10 1273.0 VLA 15000000000.0 <5.7 --
希望仅保留满足gw170817['Freq']==3000000000且gw170817['Telescope']=='VLA'的行。
解决方案
可以利用Astropy Table的布尔索引功能,直接筛选符合条件的行:
from astropy.io import ascii # 读取原始数据集 gw170817 = ascii.read('gw170817_afterglow_data_full.txt') # 构建筛选条件:同时满足Freq等于3e9且Telescope为VLA filter_condition = (gw170817['Freq'] == 3000000000) & (gw170817['Telescope'] == 'VLA') # 应用筛选条件,得到新的Table filtered_table = gw170817[filter_condition] # 可选:将筛选后的结果保存到新文件 ascii.write(filtered_table, 'gw170817_vla_3ghz.txt', overwrite=True)
说明
- 用
&表示逻辑“与”,确保两个条件同时满足,这是Astropy Table处理行筛选的常用方式 - 筛选后的
filtered_table仅包含符合要求的行,可直接查看或保存到文件 Freq列是float64类型,用整数3000000000或浮点数3e9做比较都能匹配
内容的提问来源于stack exchange,提问作者Ambica Govind
相关产品推荐
相关产品推荐

