You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Pandas DataFrame行索引为Male/Female后值变NaN的修复方法

问题原因及修复方案

你遇到的问题是因为错误地重新创建DataFrame并指定新索引,导致Pandas尝试将新索引与原DataFrame的索引对齐,但两者完全不匹配,最终填充NaN。

原代码中,你已经有一个名为Age_dist的DataFrame,再调用pd.DataFrame(Age_dist, index=index_labels)时,Pandas会以新索引['Male','Female']去匹配原DataFrame的索引[1,1],没有匹配项所以所有值变为NaN。


正确的修复方法

方法1:直接修改现有DataFrame的索引属性

index_labels = ['Male', 'Female']
Age_dist.index = index_labels

方法2:使用set_axis方法(推荐,支持链式操作)

Age_dist = Age_dist.set_axis(['Male', 'Female'], axis=0)
# 或者更清晰的写法
Age_dist = Age_dist.set_axis(['Male', 'Female'], axis='index')

完整示例(含原DataFrame构造)

如果需要先构造你的原始DataFrame,可以参考这段代码:

import pandas as pd

# 构造原始数据
data = [
    [-692, -772, -741, -698, -707, -511, -371, -203, -95, -17, -8, -1.0],
    [676, 771, 808, 865, 815, 581, 400, 226, 102, 15, 8, 0.0]
]
columns = ['0-9', '10-19', '20-29', '30-39', '40-49', '50-59', '60-69', '70-79', '80-89', '90-99', '100-109', '110-119']
Age_dist = pd.DataFrame(data, index=[1,1], columns=columns)

# 修改索引
Age_dist.index = ['Male', 'Female']
print(Age_dist)

执行后会得到正确的结果:

0-9  10-19  20-29  30-39  40-49  50-59  60-69  70-79  80-89  90-99  100-109  110-119
Male   -692   -772   -741   -698   -707   -511   -371   -203    -95    -17       -8      -1.0
Female  676    771    808    865    815    581    400    226    102     15        8       0.0

内容的提问来源于stack exchange,提问作者Francis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:04:55