[AstroPy] Find record(s) with specific key in fits table
Erik Bray
embray at stsci.edu
Mon Aug 31 10:28:31 EDT 2015
On 08/31/2015 09:36 AM, Steffen Brinkmann wrote:
> Hello,
>
> Currently, after a tedious hour of trying different things, I do the
> following to extract records with a specific key from a fits table. In
> this case the key name is 'OBJECT' and, say, I am looking for '18_Sco':
>
> $ from astropy.io import fits
> $ fits_data = fits.getdata("file.fits")
> $ fits_data[list(fits_data['OBJECT']).index('18_Sco')]
>
> The disadvantage is that only the first record with that 'OBJECT' key is
> found.
>
> This:
> $ fits_data[list(fits_data['OBJECT']) == '18_Sco']
>
> does not work. The output is a different record with another 'OBJECT'
> name. No idea why...
Because you're comparing a list to a string. This is the same as if you tried:
>>> ['a', 'b', 'c'] == 'd'
False
Python lists compare to other objects to by comparing element-wise. They'll
only compare true to something if that something is another list containing the
same values in the same order.
In Python True and False are equivalent to the integers 1 and 0, so the line of
code you quoted is always equivalent to:
>>> fits_data[0]
Since the comparison will always return False.
Phil's response is the right approach.
FITS data returned by astropy.io.fits is in a Numpy array (for the most part,
with some caveats, though none that apply here). If you'll be working with
Python extensively you'll save yourself a lot of trouble in the future by
getting comfortable with Numpy (much of which is inspired by matlab, if that helps).
The Numpy documentation is found here:
http://docs.scipy.org/doc/numpy/user/index.html
I have an introductory tutorial to Numpy that I teach, which can be read here:
https://github.com/embray/notebooks/blob/master/numpy.ipynb
You should be able to find other people at MPIA who are familiar with Numpy as well.
Best,
Erik
More information about the AstroPy
mailing list