首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫set_levels,如何避免分类标签?

熊猫set_levels,如何避免分类标签?
EN

Stack Overflow用户
提问于 2018-01-02 12:39:11
回答 2查看 454关注 0票数 3

我遇到了一个使用多索引的set_levels的问题

代码语言:javascript
复制
from io import StringIO

txt = '''Name,Height,Age
"",Metres,""
A,-1,25
B,95,-1'''

df = pd.read_csv(StringIO(txt),header=[0,1],na_values=['-1',''])

df.columns = df.columns.set_levels(df.columns.get_level_values(level=1).str.replace('Un.*',''),level=1)

     Name Height   Age
   Metres             
0      A    NaN  25.0
1      B   95.0   NaN

如果我再次运行相同的命令

代码语言:javascript
复制
df.columns = df.columns.set_levels(df.columns.get_level_values(level=1).str.replace('Un.*',''),level=1)

  Name Height   Age
       Metres      
0    A    NaN  25.0
1    B   95.0   NaN

现在,这正在产生预期的结果。为甚麽会有这种行为呢?是否有可能在第一次尝试时将标签保持未排序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-02 14:19:19

我不完全理解为什么会发生这种情况,但我找到了问题的原因和解决办法:

如果我们看一下列标签,就会发现一些奇怪的东西。

代码语言:javascript
复制
>>> df = pd.read_csv(StringIO(txt),header=[0,1],na_values=['-1',''])
>>> df.columns
MultiIndex(levels=[['Age', 'Height', 'Name'], ['Metres', 'Unnamed: 0_level_1', 'Unnamed: 2_level_1']],
           labels=[[2, 1, 0], [1, 0, 2]])

第二级指标与第一层指标不匹配。当您替换字符串时,您可以在数组上按正确的顺序执行此操作:

代码语言:javascript
复制
>>> df.columns.get_level_values(level=1)
Index(['Unnamed: 0_level_1', 'Metres', 'Unnamed: 2_level_1'], dtype='object')

但是,只需索引,就可以得到顺序不正确的数组:

代码语言:javascript
复制
>>> df.columns.levels[1]
Index(['Metres', 'Unnamed: 0_level_1', 'Unnamed: 2_level_1'], dtype='object')

因此,要删除未命名的索引:

代码语言:javascript
复制
>>> df.columns = df.columns.set_levels(df.columns.levels[1].str.replace('Un.*', ''), level=1)
>>> df

  Name Height   Age
       Metres
0    A    NaN  25.0
1    B   95.0   NaN

但是,我希望有人能指出为什么使用get_set_levels会有这种行为。

票数 2
EN

Stack Overflow用户

发布于 2018-01-02 19:38:18

听起来像是你需要的,这将根据你原来的结构进行修改。

代码语言:javascript
复制
df.rename(columns=lambda x : '' if 'Unnamed' in x else x , level=1)
Out[106]: 
  Name Height   Age
       Metres      
0    A    NaN  25.0
1    B   95.0   NaN
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48061197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档