如何合并列数据一致但列名不同的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
相关产品推荐
相关产品推荐

