python – Pandas:更改具有多级列的数据框中的特定列名称
发布时间:2020-12-16 23:40:05 所属栏目:Python 来源:网络整理
导读:我想找到更改多级数据框中特定列的更改名称的方法. 有了这些数据: data = { ('A','1','I'): [1,2,3,4,5],('B','2','II'): [1,('C','3',('D','4',('E','5','III'): [1,}dataDF = pd.DataFrame(data) 此代码无效: dataDF.rename(columns = {('A','I'):('Z','
我想找到更改多级数据框中特定列的更改名称的方法.
有了这些数据: data = { ('A','1','I'): [1,2,3,4,5],('B','2','II'): [1,('C','3',('D','4',('E','5','III'): [1,} dataDF = pd.DataFrame(data) 此代码无效: dataDF.rename(columns = {('A','I'):('Z','100','Z')},inplace=True) 结果: A B C D E 1 2 3 4 5 I II I II III 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 而且也不是: dataDF.columns.values[0] = ('Z','Z') 结果: A B C D E 1 2 3 4 5 I II I II III 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 但结合以上代码工作!!! dataDF.columns.values[0] = ('Z','Z') dataDF.rename(columns = {('A',inplace=True) dataDF 结果: Z B C D E 100 2 3 4 5 Z II I II III 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 这是熊猫的错误??吗? 解决方法
这是我的理论
pandas不希望pd.Indexs变得可变.如果我们尝试自己更改索引的第一个元素,我们可以看到这一点 dataDF.columns[0] = ('Z','Z')
但是pandas无法控制你做什么值属性. dataDF.columns.values[0] = ('Z','Z') 我们看到dataDF.columns看起来相同,但dataDF.columns.values清楚地反映了这一变化.不幸的是,df.columns.values不是显示在数据帧上的内容. 另一方面,这看起来确实应该有效.事实上,我觉得不对. dataDF.rename(columns={('A','I'): ('Z',inplace=True) 我相信这只在更改了值之后才起作用的原因是重命名是通过查看值来强制重建列.由于我们更改了值,现在可以使用了.这是非常kludgy,我不建议建立一个依赖于此的过程. 我的推荐 >确定要更改的列名称的位置 from_col = ('A','I') to_col = ('Z','Z') colloc = dataDF.columns.get_loc(from_col) cvals = dataDF.columns.values cvals[colloc] = to_col dataDF.columns = pd.MultiIndex.from_tuples(cvals.tolist()) dataDF [![enter code here][1]][1] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |