我创建了一个pandas数据帧,从scipy.io公司以下面的方式(文件.sav是在另一台计算机上创建的IDL结构。这个scipy.io公司创建标准python字典):
from scipy import io
import pandas as p
import numpy as np
tmp=io.readsav('file.sav', python_dict = True)
df=pd.DataFrame(tmp,index=tmp['shots'].astype('int32'))
数据帧包含一组值(从文件.sav)以1999920000300003等形式的一系列整数作为索引。 现在我想从这些指数中提取一个子集,他说
^{pr2}$由于某些原因我得到了表格上的错误
raise ValueError('Cannot index with multidimensional key')
再加上另一个和结尾
ValueError: Big-endian buffer not supported on little-endian compiler
但我已经检查了我正在工作的机器和创建文件.sav都是小恩迪安。所以我不认为这是问题所在。在
你的输入文件是big-endian。请参阅此处转换它:http://pandas.pydata.org/pandas-docs/dev/gotchas.html#byte-ordering-issues
前后比较
也可以在完成此操作后设置索引(例如,不要在构造函数中这样做)
^{pr2}$从你的意见来看,我将以以下方式处理这个问题:
如果您的数据帧非常大(听起来很像),那么
^{pr2}$select
方法可能会非常慢。在这种情况下,另一种方法是循环使用values_i_want
获取横截面(df.xs(val, level=0
),并将它们附加到输出数据帧中。换句话说(未经测试):不知道是否会更快。但是如果
select
方法太慢,那么值得一试。在相关问题 更多 >
编程相关推荐