如何为OrderedDict中DataFrame的行实现三次重复?
问题解决:Excel工作表行重复三次的实现
问题核心
你读取Excel为包含3个DataFrame的OrderedDict后,尝试让每行重复三次,但生成的Excel仅保留原表结构,未实现行重复。问题出在循环中未将处理后的DataFrame更新回原字典——你只是给循环变量df重新赋值,原dfs字典里的DataFrame完全没变化。
解决方案
方案1:使用Numpy实现行重复
修正循环逻辑,将处理后的DataFrame存回原字典:
import pandas as pd import numpy as np # 读取Excel为字典 path_excel_file = r'C:\Users\machukovich\Desktop\stack.xlsx' dfs = pd.read_excel(path_excel_file, sheet_name=None, skiprows=2) # 用Numpy重复每行3次,并更新回字典 for sheet_name, df in dfs.items(): # 用np.repeat重复行,再重构DataFrame repeated_df = pd.DataFrame(np.repeat(df.values, 3, axis=0), columns=df.columns) # 关键:将处理后的DataFrame存回原字典 dfs[sheet_name] = repeated_df # 后续添加列等操作(修正后可正常作用于重复后的DataFrame) mylist = ['good song','average song', 'bad song'] for sheet_name, df in dfs.items(): df['opinion'] = np.resize(mylist, len(df)) df.insert(5, 'concatenation', df['Name'].astype(str) + df['Surname'].astype(str) + df['opinion'].astype(str)) # 写入新Excel Path_new_file = r'C:\Users\machukovich\Desktop\new_file.xlsx' with pd.ExcelWriter(Path_new_file, engine='xlsxwriter') as writer: for sheet_name, df in dfs.items(): df.to_excel(writer, sheet_name=sheet_name, startrow=2, index=False)
方案2:使用Pandas原生方法实现行重复
无需依赖Numpy,直接用Pandas的index.repeat方法:
import pandas as pd import numpy as np path_excel_file = r'C:\Users\machukovich\Desktop\stack.xlsx' dfs = pd.read_excel(path_excel_file, sheet_name=None, skiprows=2) # Pandas原生方式重复每行3次 for sheet_name, df in dfs.items(): # 利用索引重复来实现行重复,自动保留列名和数据类型 repeated_df = df.loc[df.index.repeat(3)].reset_index(drop=True) dfs[sheet_name] = repeated_df # 后续列操作同方案1 mylist = ['good song','average song', 'bad song'] for sheet_name, df in dfs.items(): df['opinion'] = np.resize(mylist, len(df)) df.insert(5, 'concatenation', df['Name'].astype(str) + df['Surname'].astype(str) + df['opinion'].astype(str)) # 写入新Excel Path_new_file = r'C:\Users\machukovich\Desktop\new_file.xlsx' with pd.ExcelWriter(Path_new_file, engine='xlsxwriter') as writer: for sheet_name, df in dfs.items(): df.to_excel(writer, sheet_name=sheet_name, startrow=2, index=False)
说明
两种方案都能实现每行重复3次的需求:
- Numpy方案通过直接操作底层数组实现,适合需要更灵活数组操作的场景;
- Pandas方案更简洁,保留原DataFrame的数据类型(比如ID列的整数类型),无需重构列名。
内容的提问来源于stack exchange,提问作者machukovich
相关产品推荐
相关产品推荐

