You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Databricks中转换Excel读取后的DataFrame并生成Delta表

解决Excel复合表头转换并存入Delta表的问题

问题分析

你之前的代码仅合并了首行前两列与原表头的后续列,未覆盖所有列的复合表头合并;且读取Excel时默认将第一行当表头,导致表头行被误当作数据处理,因此无法得到预期结果。以下是适配Databricks环境的完整解决方案:


1. 读取Excel文件(保留所有行)

读取时不指定header参数,让pandas把所有行(包括复合表头行)完整读入:

import pandas as pd
import numpy as np

# 替换为你的Excel文件DBFS路径
df = pd.read_excel("/dbfs/your/excel/file/path.xlsx", header=None)

2. 合并复合表头行

假设原Excel前两行是需要合并的表头(第一行是分类、第二行是具体列名),先处理首行空值(若存在同分类跨列的情况),再拼接两行内容生成完整列名:

# 填充首行空值,继承左侧最近的非空分类值
header_category = df.iloc[0].fillna(method='ffill').tolist()
# 提取第二行的子列名
header_subcols = df.iloc[1].tolist()

# 拼接生成完整列名,处理子列名为空的情况
new_columns = []
for cat, subcol in zip(header_category, header_subcols):
    if pd.notna(subcol):
        new_columns.append(f"{cat}_{subcol}")
    else:
        new_columns.append(cat)

3. 提取有效数据行

跳过前两行表头,从第三行开始提取数据并设置新表头:

# 从索引2开始取数据行,重置索引
df_clean = df.iloc[2:].reset_index(drop=True)
# 给数据行设置合并后的表头
df_clean.columns = new_columns

4. 写入Delta表(Databricks环境)

将处理好的Pandas DataFrame转换为Spark DataFrame,再写入Delta表:

# 转换为Spark DataFrame
spark_df = spark.createDataFrame(df_clean)

# 写入Delta表(两种方式任选)
# 方式1:写入DBFS路径
spark_df.write.format("delta").mode("overwrite").save("/dbfs/path/to/your/delta_table")
# 方式2:写入Unity Catalog托管表(需提前创建catalog和schema)
# spark_df.write.format("delta").mode("overwrite").saveAsTable("your_catalog.your_schema.your_table_name")

内容的提问来源于stack exchange,提问作者MBINYALA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 16:57:27