pythonastropypyfits

How to merge two table with pyfits?


I am using Python 2.7.10 And pyfits 3.3. Earlier, I have used the following code to merge two tables. However, now I am getting some errors

t1 = pyfits.open(table1)[1].columns
t2 = pyfits.open(table2)[1].columns
new_columns = t1 + t2
hdu = pyfits.BinTableHDU.from_columns(new_columns)
hdu.writeto(outtable)

The error is:

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/home/vvikraman/anaconda2/lib/python2.7/site-packages/pyfits/hdu/table.py", line 116, in from_columns
    data = FITS_rec.from_columns(coldefs, nrows=nrows, fill=fill)
 File "/home/vvikraman/anaconda2/lib/python2.7/site-packages/pyfits/fitsrec.py", line 315, in from_columns
    if arr.hdu.data is None:
ReferenceError: weakly-referenced object no longer exists

Solution

  • Is there a reason you cannot use astropy (i.e. astropy.io.fits)?

    In that case the idiom would be:

    from astropy.table import Table, hstack
    t1 = Table.read(table1)
    t2 = Table.read(table2)
    new = hstack([t1, t2])
    new.write(outtable)
    

    In both the read and write calls, you need to provide format='fits' if the table name extension(s) do not imply that it is FITS.