'int'对象没有属性'deg'

问题描述 投票:1回答:2

在我的程序中,我使用的文件csv具有这样的值:

0.3987,-38.0349 1.7577,-66.5549 3.0406,-62.0202 3.3333,-26.5936 ... ...

from astroquery.skyview import SkyView
from astropy.coordinates import ICRS, Galactic, FK4, FK5, SkyCoord
from astropy.table import Table
from matplotlib import pyplot

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
import pandas as pd
import csv
import io, os
import astropy.units as u
import pyfits
import numpy as np
import matplotlib

catalogue = pd.read_csv('cat7.csv', delimiter=(','))
catalogue.columns = ['ra', 'dec']
df1 = catalogue[['ra','dec']]
ra = []
dec = []

for r in df1['ra']:
    ra.append(r)
for d in df1['dec']:
    dec.append(d)

os.mkdir('images')
path = os.getcwd()
tree = path+'/images/'

for i in range(1, len(df1)):    
    img = SkyView.get_images(position=SkyCoord(ra[i], dec[i], frame='icrs', unit=(u.deg, u.deg), obstime='J2000'), survey=['DSS2 Blue', '2MASS-J', '2MASS-K', 'WISE 3.4', 'WISE 22', 'GALEX Far UV'],pixels='150,150',coordinates='J2000',grid=False, gridlabels=False)

    for h in img:

        x = plt.figure(figsize=(18, 14))
        ax1 = plt.subplot2grid((3, 3), (0, 0))
        ax1.imshow(img[0][0].data, cmap='gray')
        ax1.set_xlabel('DSS2 Blue')
        ax1.set_xticks([])
        ax1.set_yticks([])

        ax2 = plt.subplot2grid((3, 3), (0, 1))
        ax2.imshow(img[1][0].data, cmap='gray')
        ax2.set_xlabel('2MASS-J')
        ax2.set_xticks([])
        ax2.set_yticks([])

        ax3 = plt.subplot2grid((3, 3), (0, 2))
        ax3.imshow(img[2][0].data, cmap='gray')
        ax3.set_xlabel('2MASS-K')
        ax3.set_xticks([])
        ax3.set_yticks([])

        ax4 = plt.subplot2grid((3, 3), (1, 0))
        ax4.imshow(img[3][0].data, cmap='gray')
        ax4.set_xlabel('WISE 3.4')
        ax4.set_xticks([])
        ax4.set_yticks([])

        ax5 = plt.subplot2grid((3, 3), (1, 1))
        ax5.imshow(img[4][0].data, cmap='gray')
        ax5.set_xlabel('WISE 22')
        ax5.set_xticks([])
        ax5.set_yticks([])

        ax6 = plt.subplot2grid((3, 3), (1, 2))
        ax6.imshow(img[5][0].data, cmap='gray')
        ax6.set_xlabel('GALEX Far UV')
        ax6.set_xticks([])
        ax6.set_yticks([])

        try:

            for filename in os.listdir('galaxies'):
                if filename.endswith('.fits'):
                    try:
                        fit = pyfits.open('galaxies/' + filename)
                        flux = fit[0].data
                        flux = np.array(flux, dtype=np.float64)
                        header = fit[0].header
                        start_wave = header['CRVAL1']
                        step = header['CDELT1']
                        w0, dw, n = start_wave, step, len(flux)
                        w = start_wave + step * n
                        wave = np.linspace(w0, w, n, endpoint=False)
                        data = Table([wave, flux], names=(str(header['CRVAL1']), str(step)))
                        until = 5660 - start_wave + 901
                        until = until/step

                        u = int(until)
                        j = (flux[0:u])
                        media1 = sum(flux[0:u])/len(j)
                        media1 = media1+100
                        inc = u + 5
                        k = (flux[u:inc])
                        media_h = sum(flux[u:inc])/len(k)

                        hdu_name = fit
                        name  = hdu_name[0].header['TARGET']
                        ra_fit = hdu_name[0].header['OBSRA']
                        dec_fit = hdu_name[0].header['OBSDEC']
                        m = max(k)+100

                        if(int(ra_fit) == int(ra[i]) and int(dec_fit) == int(dec[i])):                                                             
                            ax7 = plt.subplot2grid((3, 3), (2, 0), colspan=3)
                            ax7.plot(wave, flux, label = name, color='black')
                            ax7.annotate('hα',xy=(6562,m),xytext=(6545,m))
                            plt.ylabel('Counts')
                            plt.xlabel('Wavelength (Å)')
                            x.savefig(tree+name, format='png')
                            plt.close(x)


                    except:
                        continue
        except:
            continue

我需要将这些数字与一些文件.fits进行比较。它的作品,但它只工作一次!循环“for”的第二次显示错误:'int'对象没有属性'deg'。如果在“img = Sky ...”之前放置“尝试”,它会跳转此功能!与其他数字相比如何?

python-3.x csv
2个回答
1
投票

21世纪的字母表让你有点不知所措:

import astropy.units as u
...
... , unit=(u.deg, u.deg), ...
...
    u = int(until)

将它改为import astropy.units as units,你会更开心。或者至少,您不会通过为其分配整数值来废弃该符号。


0
投票

正如J_H所说,有必要将导入astropy.units中的值“u”更改为“units”作为单位和... unit =(units.deg,u.deg),....之后代码完美运行。谢谢!!!

© www.soinside.com 2019 - 2024. All rights reserved.