合并DataFrame前两行并编辑结果:解决ValueError及格式调整
问题与解决方案
问题背景
现有如下结构的DataFrame:
import pandas as pd df = pd.DataFrame({ '0': ['FY18', 'Q1', 1500, 1200, 950, 2200], '1': ['FY18', 'Q2', 2340, 1234, 2000, 1230], '2': ['FY18', 'Q3', 2130, 2200, 2190, 2210], '3': ['FY18', 'YearTotal', 1000, 1900, 1500, 1800], })
需要实现两个需求:
- 合并每列的前两行内容,替换原前两行形成新列头部(如
FY18+Q1转为1Q18,FY18+YearTotal保留FY18) - 修正之前代码触发的
ValueError: Incompatible indexer with DataFrame错误
错误原因分析
你之前的代码存在维度不匹配问题:
merged_row = pd.concat([df.iloc[0], df.iloc[1]], axis=1).T生成的是4行2列的DataFrame- 而
df.iloc[0]是长度为4的Series,直接赋值会导致维度不兼容,因此触发错误
正确解决方案
方法步骤
- 遍历每一列,按规则处理前两行的合并逻辑
- 用处理后的头部+原列剩余数据重新构造DataFrame
代码实现
import pandas as pd # 原始DataFrame df = pd.DataFrame({ '0': ['FY18', 'Q1', 1500, 1200, 950, 2200], '1': ['FY18', 'Q2', 2340, 1234, 2000, 1230], '2': ['FY18', 'Q3', 2130, 2200, 2190, 2210], '3': ['FY18', 'YearTotal', 1000, 1900, 1500, 1800], }) # 处理每一列的数据 processed_data = {} for col in df.columns: fy_period = df[col].iloc[0] sub_period = df[col].iloc[1] # 构造新的头部内容 if sub_period.startswith('Q'): # Qn → nQ,拼接FY后两位 new_header = f"{sub_period[1]}Q{fy_period[2:]}" elif sub_period == 'YearTotal': new_header = fy_period # 组合新列数据:新头部 + 原列第3行及以后的内容 processed_data[col] = [new_header] + df[col].iloc[2:].tolist() # 生成最终DataFrame final_df = pd.DataFrame(processed_data) print(final_df)
输出结果
0 1 2 3 0 1Q18 2Q18 3Q18 FY18 1 1500 2340 2130 1000 2 1200 1234 2200 1900 3 950 2000 2190 1500 4 2200 1230 2210 1800
内容的提问来源于stack exchange,提问作者postcolonialist
相关产品推荐
相关产品推荐

