pandas DataFrame: Как избежать 'ValueError: Буфер с прямым порядком байтов не поддерживается на компиляторе с прямым порядком байтов' при удалении определенных значений - PullRequest
0 голосов
/ 03 октября 2019

У меня есть различные файлы .fits, которые содержат данные для спектров. Я конвертирую данные в панды 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())

, который я нашел в другом посте об этом сообщении об ошибке, но у меня это не работает.

1 Ответ

0 голосов
/ 04 октября 2019

Можете ли вы попробовать что-то вроде этого:

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]
...