我有一个numpy结构化数组,例如B具有以下形式
array([('J0006+1834', '-99', 0.693748, 2.1e-15),
('J0007+7303', 'NRAD', 0.315873, 3.6e-13),
('B0011+47', '-99', 1.240699, 5.64e-16), ...,
('B2334+61', '-99', 0.49537, 1.93e-13),
('J2346-0609', '-99', 1.181463, 1.36e-15),
('B2351+61', '-99', 0.944784, 1.63e-14)],
dtype=[('Name', 'S10'), ('Type', 'S10'), ('P0', '<f8'), ('P1', '<f8')])
我需要能够搜索名为Type的第二列的部分匹配。我的数组包含以NR开头的secong列中的值,我希望能够将它们作为一个组进行搜索。我尝试了np.where和startwidth,但我没有成功。我也尝试过使用通配符,但没有任何效果。
理想情况下,我想要一个像这样的命令
B[B['Type']=='NR*']
将返回alla元素的元素,列中的类型以NR开头。
感谢您的时间,我期待着您的回复。
答案 0 :(得分:1)
如果您真的想使用numpy
,可以使用np.char.startswith
:
>>> np.char.startswith(d["Type"], "NR")
array([False, True, False, False, False, False], dtype=bool)
>>> d[np.char.startswith(d["Type"], "NR")]
array([('J0007+7303', 'NRAD', 0.315873, 3.6e-13)],
dtype=[('Name', 'S10'), ('Type', 'S10'), ('P0', '<f8'), ('P1', '<f8')])
但恕我直言,这实际上更像是一个pandas
问题:
>>> df = pd.DataFrame(d)
>>> df
Name Type P0 P1
0 J0006+1834 -99 0.693748 2.100000e-15
1 J0007+7303 NRAD 0.315873 3.600000e-13
2 B0011+47 -99 1.240699 5.640000e-16
3 B2334+61 -99 0.495370 1.930000e-13
4 J2346-0609 -99 1.181463 1.360000e-15
5 B2351+61 -99 0.944784 1.630000e-14
>>> df[df.Type.str.startswith("NR")]
Name Type P0 P1
1 J0007+7303 NRAD 0.315873 3.600000e-13
不可否认,这里的语法非常相似,无论哪种方式都没有多大优势,但是一旦你想开始执行其他操作(例如分组),pandas
开始闪耀并且使用裸numpy
变得越来越多不方便。