使用Pandas追加Excel数据时Sales列数据误入Item列的问题咨询
解决Sales列数据错误映射到Item列的问题
你的核心问题出在读取的Excel表列名和目标DataFrame的列名不匹配,导致追加数据时出现错位。读取的工作表第一列叫Sales,但目标DataFrame需要的对应列是Item,pandas按列名匹配时找不到对应项,就会出现数据错位或错误映射的情况。下面是具体的解决步骤:
步骤1:重命名读取的DataFrame列
首先把读取到的reading_book1中的Sales列重命名为Item,让它和目标DataFrame的列名完全对应:
reading_book1 = pd.read_excel(file, sheet_name="1-Rollout", skiprows=restvalue).iloc[:10] # 重命名Sales列为Item,对齐目标列名 reading_book1 = reading_book1.rename(columns={'Sales': 'Item'})
步骤2:强制对齐列顺序(可选但推荐)
为了避免因列顺序不一致导致的数据错位,可以让读取的DataFrame严格遵循目标DataFrame的列顺序,缺失的列自动填充空值:
# 获取目标DataFrame的列顺序 target_columns = RestDataframe.columns # 按目标列顺序重新排列,缺失列补空值 reading_book1 = reading_book1.reindex(columns=target_columns, fill_value=None)
步骤3:修正数据合并的写法
你之前把reading_book1放到列表里再追加的写法没必要,而且pandas的append()方法已经在1.4.0版本被弃用,推荐用pd.concat()来合并数据,更灵活清晰:
# 替换原来的append步骤,用concat合并多个DataFrame RestDataframe = pd.concat([RestDataframe, AllFields, reading_book1], ignore_index=True)
完整修改后的代码示例
# 读取数据并重命名关键列 reading_book1 = pd.read_excel(file, sheet_name="1-Rollout", skiprows=restvalue).iloc[:10] reading_book1 = reading_book1.rename(columns={'Sales': 'Item'}) # 对齐目标列顺序 target_columns = RestDataframe.columns reading_book1 = reading_book1.reindex(columns=target_columns, fill_value=None) # 合并数据到RestDataframe RestDataframe = pd.concat([RestDataframe, AllFields, reading_book1], ignore_index=True) # 填充其他固定列数据 RestDataframe['Project'] = read_ProjectNumber RestDataframe['Full Project'] = read_fullProject RestDataframe['Sponsor'] = read_Sponsor RestDataframe['Round'] = read_round RestDataframe['Project Step'] = read_projectstep RestDataframe['Market'] = "Rest of the World Market" # 合并到最终DataFrame FinalDataframe = pd.concat([FinalDataframe, CADataframe, RestDataframe], ignore_index=True)
出错原因复盘
- 列名不匹配是核心:读取的
Sales列和目标的Item列名称不一致,pandas无法自动关联,导致数据错位到其他列。 append()方法已被弃用:官方推荐用pd.concat()替代,它在处理多DataFrame合并、索引重置等场景下更可靠。
内容的提问来源于stack exchange,提问作者sid soni
相关产品推荐
相关产品推荐

