【发布时间】:2021-04-05 10:01:59
【问题描述】:
我已阅读有关从多索引列中进行选择的其他帖子,但它对我的方案没有帮助。
我有这样的示例列:
('', 'X', 'Name'),
('', 'Y', 'Name'),
('S1', 'X', 'OVERALL TOTALS OF ALL SUBJECTS'),
('S1', 'X', 'OVERALL PERCENTAGES OF ALL SUBJECTS'),
('S2', 'Y', 'OVERALL TOTALS OF ALL SUBJECTS'),
('S2', 'Y', 'OVERALL PERCENTAGES OF ALL SUBJECTS')
- 我想将 ('', 'Y', 'Name') 中的“Name”重命名为“Name2”。
- 我想将 ('', 'X', 'Name') 列中的所有值转换为标题大小写。
我尝试使用 df.get_level_values(2) 和 df.set_levels(newlist, level=2) 尝试使用新的值列表更改列的名称,但我收到错误“级别值必须是唯一的”。我也试过df.rename(columns={('', 'Y', 'Name'): ('', 'Y', 'Name2')}, inplace=True),但没有任何反应。 df.rename(columns={'Name': 'Name2'}, level=2, inplace=True) 重命名两个“名称”,所以这也不起作用。
当我尝试df[[('', 'X', 'Name')]].str.lower() 时,我收到错误“'DataFrame' 对象没有属性 'str'”。不知道为什么会这样。此列 ('', 'Y', 'Name') 是所有名称,字符串也是。此外,df[[('', 'Y', 'Name')]].dtypes 返回“对象”。我怀疑这个错误又是由于我选择列的方式造成的。
我有多个要读取的文件,因此每个文件的列名可能不同。没有一个级别具有唯一的名称。但是,所有 3 个级别的组合始终是唯一的。
我需要在第 2 级处理一个非常具体的列。所以,我想要一种方法来可靠地选择一个这样的列,使用 df[('A', 'B', 'C')] 之类的东西来重命名列以及将其行值转换为小写。我该怎么做?
【问题讨论】: