有了这些数据:
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 III0 1 1 1 1 11 2 2 2 2 22 3 3 3 3 33 4 4 4 4 44 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 III0 1 1 1 1 11 2 2 2 2 22 3 3 3 3 33 4 4 4 4 44 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 III0 1 1 1 1 11 2 2 2 2 22 3 3 3 3 33 4 4 4 4 44 5 5 5 5 5
这是熊猫的错误吗?
解决方法 这是我的理论pandas不希望pd.Indexs变得可变.如果我们尝试自己更改索引的第一个元素,我们可以看到这一点
dataDF.columns[0] = ('Z','Z')
06001
但是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.valuescvals[colloc] = to_coldataDF.columns = pd.MultiIndex.from_tuples(cvals.toList())dataDF[![enter code here][1]][1]总结
以上是内存溢出为你收集整理的python – Pandas:更改具有多级列的数据框中的特定列名称全部内容,希望文章能够帮你解决python – Pandas:更改具有多级列的数据框中的特定列名称所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)