当我尝试从功能性numpy数组创建它们时,DataFrames正在吐出endianess错误。这是一个pastebin,更多细节如下: http://pastebin.com/Sdg9EM61
在我的字段中,我们以.FIT格式存储数据,这是一种二进制格式(稍后可能会有用)
我真的不知道如何在几行代码和错误之后解决这个问题。
d = fits.getdata('file.fit')
d2 = np.array(d)
然后你可以用这样做很酷的技巧:
d2[d2['key1'] > 10.]
d2[['key1', 'key2']]
等
当我将其转换为pandas DataFrame
时d3 = pandas.DataFrame(d2)
事情开始变得怪异。列名已更改,例如:
d3.columns
返回
Index([u'key1', u'key2'], dtype='object')
将这个新的u放在每个列名前面而不是
d2.dtype
返回
dtype([('key1', '>i4'), ('key2', 'S19')])
虽然当你执行d3.dtypes而不是d3.columns时,数据类型中的数据类型看起来不错......
无论如何,DataFrame拥有所有数据并保留数据类型,我可以打印出特征数据等,但是一旦我尝试做这样的事情:
d3[d3['key1'] > 10.]
我收到关于endianess的怪物错误:
ValueError: Big-endian buffer not supported on little-endian compiler
有关这意味着什么以及如何解决的任何见解?
答案 0 :(得分:4)
好的,FITS文件实际上是问题所在。事实证明FITS都是大端,而pandas和scipy和东西倾向于假设小端(我不知道这个端项业务是什么,只是总结了一个线程)这显然会引起一些奇怪的问题(我直到看到我才看到)在熊猫)。
我找到的解决方案是:
d = fits.getdata('data.fit')
df=pd.DataFrame(np.array(d).byteswap().newbyteorder())