pandas DataFrame: How to avoid 'ValueError: Big-endian buffer not supported on little-endian compiler' when deleting certain values

pandas DataFrame: How to avoid 'ValueError: Big-endian buffer not supported on little-endian compiler' when deleting certain values

我有各种包含光谱数据的 .fits 文件。我正在将数据转换为 pandas DataFrames。一些 .fits 文件包含两页数据,这就是我包含 try 函数的原因。获得所有数据后,我会尝试消除不包含数据的行:

try:
    df = pd.DataFrame(grism1D[1].data)
    dfb = pd.DataFrame(grism1D[2].data)
    df = df.append(dfb)
    df = df[df.flux != 0]
except:
    print("Missing Data")
    df = pd.DataFrame(grism1D[1].data)
    df = df.append(df)
    df = df[df.flux != 0]

这行得通,但如果我不包括 df = df.append(df) 行,我会得到一个错误

ValueError: Big-endian buffer not supported on little-endian compiler

我通过将数据附加到自身以一种非常愚蠢的方式解决了这个问题,这实际上是将光谱的点绘制在彼此之上。这在最终图像中看起来不错,但我希望有一种方法可以做到这一点,在不将数据附加到自身的情况下我不会收到错误消息。

我也试过了

df=pd.DataFrame(np.array(grism1D).byteswap().newbyteorder())

这是我从另一个 post 那里找到的关于此错误消息的信息,但这对我不起作用。

你能试试这样吗:

from astropy.table import Table, vstack
tbl = Table.read('your_fits_file.fits', hdu=1)
try:
    tbl2 = Table.read('your_fits_file.fits', hdu=2)
except:
    pass
else:
    tbl = vstack([tbl, tbl2])

df = tbl.to_pandas()
df = df[df.flux != 0]