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

如何使用pandas.melt将宽格式差异对比DataFrame转为长格式?

解决FileMaker转Airtable时宽格式差异表转长格式问题

针对你对比CSV得到的宽格式差异表,用pandas做行拆分重组就能转成目标长格式,比melt更适配你的数据结构——你的宽表是每3列一组对应一条长表记录(唯一ID、字段名、字段值),具体操作如下:

代码实现

import pandas as pd

# 读取宽格式文件:无表头,按空格分隔(如果是CSV就把delim_whitespace改成sep=',')
df = pd.read_csv('diff_wide.csv', header=None, delim_whitespace=True)

# 按每3列分组,对应(id, 字段名, 字段值)的结构
column_groups = [df.columns[i:i+3] for i in range(0, len(df.columns), 3)]

# 遍历每组列,转成子表后合并
long_table_parts = []
for cols in column_groups:
    # 取当前组的列,重命名并过滤空行
    sub_table = df[cols].dropna(how='all').rename(columns={cols[0]:'id', cols[1]:'field', cols[2]:'value'})
    long_table_parts.append(sub_table)

# 合并所有子表,清理空值后输出
final_long_table = pd.concat(long_table_parts, ignore_index=True).dropna()
final_long_table.to_csv('diff_long.csv', sep=' ', index=False, header=False)

效果验证

输入宽表:

0   1          2    3    4    5       6           7           8
694 label     lorem  
675 biography henry  675 text  lorem
708 text      foo    708 label bar    708         description ipsum 

运行后输出的长表:

694 label     lorem
675 biography henry
675 text      lorem
708 text      foo
708 label     bar
708 description ipsum

注意事项

  • 如果原文件用逗号分隔,替换delim_whitespace=True为sep=','即可适配CSV格式。
  • dropna()用来过滤宽表中未填满的空列产生的无效行,确保输出干净。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:03:23