[AstroPy] Indexing table rows
David Buscher
dfb at mrao.cam.ac.uk
Fri Mar 1 05:59:11 EST 2013
It appears that the astropy.tables module does not accept the same row
indexing syntax as the corresponding ndarray, particularly the syntax
output by np.where(), which is a tuple containing an ndarray. Example
below:
Python 2.7.3 |EPD 7.3-1 (64-bit)| (default, Apr 12 2012, 11:14:05)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "credits", "demo" or "enthought" for more information.
>>> import numpy as np
>>> from astropy.table import Table
>>> t=Table(np.reshape(np.arange(12),(4,3)))
>>> print t
col0 col1 col2
---- ---- ----
0 1 2
3 4 5
6 7 8
9 10 11
>>> rows=np.where(t["col0"]>5)
>>> print rows
(array([2, 3]),)
# ndarray version
>>> print np.array(t)[rows]
[(6, 7, 8) (9, 10, 11)]
# Tables version
>>> print t[rows[0]]
col0 col1 col2
---- ---- ----
6 7 8
9 10 11
>>> print t[rows]
ERROR: TypeError: unhashable type: 'numpy.ndarray' [astropy.table.table]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/astropy/table/table.py",
line 1282, in __getitem__
if any(x not in set(self.colnames) for x in item):
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/astropy/table/table.py",
line 1282, in <genexpr>
if any(x not in set(self.colnames) for x in item):
TypeError: unhashable type: 'numpy.ndarray'
I am using astropy version 0.2. Is this behaviour on purpose or a bug?
It can be worked around by taking the first element of the indexing
tuple as above, but it seems counterintuitive that the output of
np.where() cannot be used directly to select table rows.
David
More information about the AstroPy
mailing list