我有一组制表符分隔文件,我必须阅读它们,将它们用作pandas数据帧,对它们执行一大堆操作然后将它们合并回一个excel文件,代码太长所以我要去经历有问题的一部分
我正在解析的选项卡文件包含所有相同数量的行2177
当我读取这些文件时,我按前两列的类型(string,int)进行索引
df = df.set_index(['id', 'coord'])
data = OrderedDict()
#data will contain all the information I am writing to excel
data[filename_id] = df
Run Code Online (Sandbox Code Playgroud)
我正在做的其中一个程序需要访问每行数据[sample_id],其中包含用列'id'和'coord'索引的混合类型的数据帧,就像这样
sample_row = data[sample].ix[index]
Run Code Online (Sandbox Code Playgroud)
我的索引是('id','coord')
如果我正在处理文件的一个子集,一切都很好,但如果我用2177行读取整个文件,我最终会收到此错误消息
KeyError: 'Key length (2) was greater than MultiIndex lexsort depth (0)'
Run Code Online (Sandbox Code Playgroud)
我搜遍了SO和所有地方似乎这是一个排序索引的问题,但我不明白为什么使用未排序的子集不会导致问题
关于如何解决这个问题的任何想法?
谢谢
文件非常好.如果您使用多索引,通过(多次!)读取它们是值得的,请参阅此处
In [9]: df = DataFrame(np.arange(9).reshape(-1,1),columns=['value'],index=pd.MultiIndex.from_product([[1,2,3],['a','b','c']],names=['one','two']))
In [10]: df
Out[10]:
value
one two
1 a 0
b 1
c 2
2 a 3
b 4
c 5
3 a 6
b 7
c 8
In [11]: df.index.lexsort_depth
Out[11]: 2
In [12]: df.sortlevel(level=1)
Out[12]:
value
one two
1 a 0
2 a 3
3 a 6
1 b 1
2 b 4
3 b 7
1 c 2
2 c 5
3 c 8
In [13]: df.sortlevel(level=1).index.lexsort_depth
Out[13]: 0
In [9]: df = DataFrame(np.arange(9).reshape(-1,1),columns=['value'],index=pd.MultiIndex.from_product([[1,2,3],['a','b','c']],names=['one','two']))
In [10]: df
Out[10]:
value
one two
1 a 0
b 1
c 2
2 a 3
b 4
c 5
3 a 6
b 7
c 8
In [11]: df.index.lexsort_depth
Out[11]: 2
In [12]: df.sortlevel(level=1)
Out[12]:
value
one two
1 a 0
2 a 3
3 a 6
1 b 1
2 b 4
3 b 7
1 c 2
2 c 5
3 c 8
In [13]: df.sortlevel(level=1).index.lexsort_depth
Out[13]: 0
Run Code Online (Sandbox Code Playgroud)
更新:
sortlevel将被弃用,所以使用sort_indexie
df.sort_index(level=1)
Run Code Online (Sandbox Code Playgroud)