如何将Pandas现有DataFrame的列名设为新DataFrame的索引?
解决方法:将DataFrame索引设置为原列名
看起来你想要把原DataFrame的列名作为新DataFrame的索引,但之前的代码因为语法和逻辑问题没达到效果,我来帮你梳理一下:
首先,先明确你的原始DataFrame结构(补充了NaN的位置,方便理解):
col1 col2 col3 col4 col5 col6 A q 12 12/5/2018 NaN NaN B w 13 12/6/2018 NaN NaN C e 15 12/7/2018 NaN NaN D r 12 12/8/2018 NaN NaN E t 18 12/9/2018 NaN NaN F y 19 12/10/2018 NaN NaN G u 21 12/5/2018 NaN NaN
为什么你之前的代码没用?
你写的代码有两个关键问题:
- 语法错误:
index['col1','col2',...]缺少了等号,正确的参数写法应该是index=['col1','col2',...] - 长度不匹配:原DataFrame有7行数据,但你要设置的索引只有6个元素(
col1到col6),pandas不允许索引长度和数据行数不一致,所以会直接忽略你的索引设置,保留原来的默认索引[1,2,...7]
正确的实现方式
要让新DataFrame的索引是原列名,最合理的做法是转置原DataFrame——转置后,原DataFrame的列名会自动成为新DataFrame的行索引,原行索引则变成新DataFrame的列名。代码如下:
import pandas as pd # 假设你的原始DataFrame是df new_dataframe = df.T
执行后,你可以检查:
new_dataframe.index.values会返回array(['col1', 'col2', 'col3', 'col4', 'col5', 'col6'], dtype=object)- 如果需要设置索引的名称,可以额外加一行:
new_dataframe.index.name = '原列名' # 自定义索引名称
补充说明
如果你不想转置(比如有特殊的结构需求),那你需要先调整数据的形状,让行数和索引长度匹配,但这种场景比较少见。转置是最直接符合你需求的方案,因为它天然把原列名映射成了新DataFrame的索引。
内容的提问来源于stack exchange,提问作者Piyush S. Wanare
相关产品推荐
相关产品推荐

