Pandas 熊猫适用于索引

Pandas 熊猫适用于索引,pandas,Pandas,我有一个df,它有一些列和一个字节数据类型的多索引。我能做的就是清理柱子 for c in df.columns: df[c] = df[c].apply(lambda x: x.decode('UTF-8')) 对于单个索引,这应该是可行的 df.index.map(lambda x: x.decode('UTF-8')) 但它似乎在使用多索引时失败了。我能为多重索引做些类似的事情吗 编辑: 范例 以及所需的输出 pd.DataFrame().from_dict({'val': {

我有一个df,它有一些列和一个字节数据类型的多索引。我能做的就是清理柱子

for c in df.columns:
    df[c] = df[c].apply(lambda x: x.decode('UTF-8'))
对于单个索引,这应该是可行的

df.index.map(lambda x: x.decode('UTF-8'))
但它似乎在使用多索引时失败了。我能为多重索引做些类似的事情吗

编辑: 范例

以及所需的输出

pd.DataFrame().from_dict({'val': {('A', 'a'): 1,
  ('A', 'b'): 2,
  ('B', 'a'): 3,
  ('B', 'b'): 4,
  ('B', 'c'): 5}})

方法1:

df.index = pd.MultiIndex.from_tuples([(x[0].decode('utf-8'), x[1].decode('utf-8')) for x in df.index])
df.reset_index().set_index('val').applymap(lambda x: x.decode('utf-8')).reset_index().set_index(['level_0', 'level_1'])
        val
A   a   1
    b   2
B   a   3
    b   4
    c   5
%timeit结果:
1000个循环,每个循环的最佳时间为3:573µs

df.index.levels = ([ names.map(lambda x: x.decode('UTF-8')) for i, names in enumerate(df.index.levels)])
方法2:

df.index = pd.MultiIndex.from_tuples([(x[0].decode('utf-8'), x[1].decode('utf-8')) for x in df.index])
df.reset_index().set_index('val').applymap(lambda x: x.decode('utf-8')).reset_index().set_index(['level_0', 'level_1'])
        val
A   a   1
    b   2
B   a   3
    b   4
    c   5
%timeit结果:
100个循环,每个循环的最佳时间为3:4.17 ms

df.index.levels = ([ names.map(lambda x: x.decode('UTF-8')) for i, names in enumerate(df.index.levels)])
输出:

df.index = pd.MultiIndex.from_tuples([(x[0].decode('utf-8'), x[1].decode('utf-8')) for x in df.index])
df.reset_index().set_index('val').applymap(lambda x: x.decode('utf-8')).reset_index().set_index(['level_0', 'level_1'])
        val
A   a   1
    b   2
B   a   3
    b   4
    c   5

你能做
df.head(5).to_dict()
并将输出粘贴到这里,这样就很容易重现你的问题了吗?如果您能添加预期的输出,那也太好了。编辑以显示示例您是否尝试
重置索引
,然后对所有列执行任务,然后
设置索引
,以恢复原始的多索引?非常感谢。我希望有一艘这样的班轮