总而言之,当我尝试从功能性 numpy 数组创建 DataFrame 时,DataFrame 会吐出字节顺序错误。这是一个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.]
我得到一个关于字节序的巨大错误:
ValueError: Big-endian buffer not supported on little-endian compiler
关于这意味着什么以及如何解决的任何见解?
最佳答案
好的,FITS 文件实际上是问题所在。事实证明 FITS 都是大端,而 pandas 和 scipy 之类的东西倾向于采用小端(我不知道这个端业务是什么,只是总结了一个线程)这显然会导致一些奇怪的问题(我从来没有见过直到看在 Pandas )。
我找到的解决方案是:
d = fits.getdata('data.fit')
df=pd.DataFrame(np.array(d).byteswap().newbyteorder())
关于python - 从 numpy 数组创建 pandas DataFrame 会导致奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30283836/