Pandas 熊猫适用于索引
我有一个df,它有一些列和一个字节数据类型的多索引。我能做的就是清理柱子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': {
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()
并将输出粘贴到这里,这样就很容易重现你的问题了吗?如果您能添加预期的输出,那也太好了。编辑以显示示例您是否尝试重置索引
,然后对所有列执行任务,然后设置索引
,以恢复原始的多索引?非常感谢。我希望有一艘这样的班轮