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

同维度DataFrame相除后维度异常且全为NaN问题求助

问题分析与解决方案

核心原因

你遇到的问题本质是两个DataFrame的索引/列标签未正确对齐,导致divide执行了外连接(outer join),没有匹配的元素,最终生成全NaN的结果。当你直接用values计算时,是按数组位置强制相除,跳过了pandas的标签对齐逻辑,所以能得到正确结果,但丢失了索引和列的语义信息。

解决方案

方法1:修正导入流程,确保索引与列完全匹配

你的示例数据是分层表头结构,原导入代码错误地将表头行当作数据索引,导致索引和列的标签混乱。正确的导入方式如下,保证两个DataFrame的索引(年份)和列MultiIndex(州+地区)完全一致:

import pandas as pd

# 处理 household_income_sample.csv
household_income = pd.read_csv(
    'household_income_sample.csv',
    header=[0, 1, 2],  # 指定前3行为分层表头
    index_col=2         # 将第3层表头(Year)作为数据索引
)
# 移除列MultiIndex中空的Year层级
household_income.columns = household_income.columns.droplevel(2)
# 清理索引,只保留年份作为索引
household_income = household_income.reset_index(level=[0,1], drop=True)
# 转换数据类型为数值型
household_income = household_income.astype(float)

# 处理 housing_prices_sample.csv(逻辑完全一致)
housing_prices = pd.read_csv(
    'housing_prices_sample.csv',
    header=[0, 1, 2],
    index_col=2
)
housing_prices.columns = housing_prices.columns.droplevel(2)
housing_prices = housing_prices.reset_index(level=[0,1], drop=True)
housing_prices = housing_prices.astype(float)

# 此时执行除法会自动按标签对齐计算
blah = housing_prices.divide(household_income)

方法2:强制按位置匹配计算(不推荐,仅应急使用)

如果无法修正索引/列结构,可强制跳过标签对齐,直接按位置计算:

# 方式1:用divide的参数指定按行位置匹配
blah = housing_prices.divide(household_income.values, axis=0)

# 方式2:转换为数组计算后再转回DataFrame,保留原索引和列
blah = pd.DataFrame(
    housing_prices.values / household_income.values,
    index=housing_prices.index,
    columns=housing_prices.columns
)

对提问方式的反馈

  • 优点:提供了示例数据和完整导入代码,能快速复现问题,这是非常好的提问习惯;清晰描述了现象、尝试过的方法和期望结果。
  • 优化点:可以补充两个DataFrame的索引/列的具体输出(比如print(housing_prices.index)和print(housing_prices.columns)的结果),能更快定位到标签对齐的问题;明确说明期望按「年份+州」的对应关系计算,语义更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:01:17