如何用Pandas结合xlwings将DataFrame指定字段写入Excel?
解决方案
问题核心
你当前的DataFrame仅包含一列,每行数据是嵌套的字典结构,直接通过列名索引会找不到目标字段,必须先将字典展开为多列的标准DataFrame,再提取指定字段写入Excel。
修正步骤与代码
方法1:直接处理字典列表(推荐)
如果sas.get_profile()返回的是包含多个字典的列表,直接用pd.json_normalize展开为多列DataFrame:
import xlwings as xw import pandas as pd # 打开目标Excel和工作表 wb = xw.Book('Easy_Algo.xlsx') ts = wb.sheets['profile'] # 获取原始字典列表数据 pdata = sas.get_profile() # 将字典列表展开为多列DataFrame,自动以字典键作为列名 df_expanded = pd.json_normalize(pdata) # 提取需要的指定字段(确保字段名与字典键完全匹配,含空格、大小写) target_fields = ['symbol', 'product', 'avg price', 'buy avg'] df_selected = df_expanded[target_fields] # 从A1单元格开始写入,自动包含表头 ts.range('A1').value = df_selected
方法2:处理已生成的单列DataFrame
如果已经得到了仅含一列的DataFrame(比如列名为0或自定义列名),先提取列内的字典再展开:
import xlwings as xw import pandas as pd wb = xw.Book('Easy_Algo.xlsx') ts = wb.sheets['profile'] pdata = sas.get_profile() # 生成单列DataFrame df = pd.DataFrame(pdata) # 提取单列中的所有字典,展开为多列DataFrame # 若列名不是0,替换为实际列名(比如df['data']) df_expanded = pd.json_normalize(df.iloc[:, 0]) # 提取目标字段并写入Excel target_fields = ['symbol', 'product', 'avg price', 'buy avg'] ts.range('A1').value = df_expanded[target_fields]
关键注意事项
- 确保
target_fields中的字段名与原始字典的键完全一致,包括空格、大小写,否则会触发KeyError。 pd.json_normalize会自动处理嵌套字典(如果有的话),是解析字典列表最便捷的工具。- xlwings写入DataFrame时,默认会将表头和数据一起写入,正好匹配你需要的表头对应格式。
内容的提问来源于stack exchange,提问作者Gnziet
相关产品推荐
相关产品推荐

