[AstroPy] Indexing table rows

Tom Aldcroft aldcroft at head.cfa.harvard.edu
Fri Mar 1 07:08:38 EST 2013


Hi David,

Thanks for reporting this issue.  This is a bug and is now tracked at
  https://github.com/astropy/astropy/issues/838

This should be fixed in the 0.2.1 release scheduled for early April.

Cheers,
Tom

On Fri, Mar 1, 2013 at 5:59 AM, David Buscher <dfb at mrao.cam.ac.uk> wrote:
> 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
> _______________________________________________
> AstroPy mailing list
> AstroPy at scipy.org
> http://mail.scipy.org/mailman/listinfo/astropy
>



More information about the AstroPy mailing list