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

如何合并列数据一致但列名不同的expense与revenue DataFrame?

解决Pandas追加DataFrame时出现额外列的问题

看起来你碰到的核心问题是两个DataFrame的列名不匹配,导致合并后多出了Unnamed:0列。咱们来拆解下问题,然后给出修复方案:

问题根源

从你描述的结构来看:

  • revenue的第一列有明确的表头文本:Fiscal year is January-December. All values CAD millions.
  • expense的第一列表头是空的,所以Pandas自动给它命名为Unnamed:0

当你用append(或者concat)合并时,Pandas会自动对齐列名,缺失的列会填充NaN,这就导致了额外的Unnamed:0列出现。

修复步骤

我们只需要把expense的Unnamed:0列重命名为和revenue第一列相同的名称,就能让两个DataFrame的列完全匹配,合并后就不会有多余列了。

另外注意:Pandas的append方法已经被弃用,更推荐使用pd.concat来合并DataFrame。

修正后的完整代码

import pandas as pd
import lxml
from lxml import html
import requests
import numpy as np

symbol = 'MFC'
url = 'https://www.marketwatch.com/investing/stock/'+ symbol +'/financials'
df=pd.read_html(url)

# 处理revenue DataFrame
revenue = pd.concat(df[0:1])
revenue = revenue.dropna(axis='columns')
# 提取revenue第一列的名称,用来统一列名
revenue_first_col = revenue.columns[0]

# 处理expense DataFrame
expense = pd.concat(df[1:2])
expense = expense.dropna(axis='columns')
# 重命名expense的Unnamed:0列,和revenue的第一列保持一致
expense.rename(columns={'Unnamed:0': revenue_first_col}, inplace=True)

# 合并两个DataFrame(推荐用pd.concat,替代已弃用的append)
statement = pd.concat([revenue, expense], ignore_index=True)

# 如果一定要用append(不推荐,未来版本会移除),可以这样写:
# statement = revenue.append(expense, ignore_index=True)

效果说明

现在合并后的statement会包含收入和支出的所有行,列结构和原来的revenue完全一致,不会再出现多余的Unnamed:0列啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:32:32