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

Python实现DataFrame拆分列值提取前缀为表头并填充数据求助

交通数据格式转换解决方案

针对你的需求,这里提供一套批量处理的Python方案,无需逐列操作,适配大数量级数据:

核心思路

先把宽格式的原数据转成便于统一处理的长格式,拆分所有meters:seconds对,再重新构建成目标格式的宽表,自动填充缺失值。

完整代码实现

import pandas as pd

# ----------------------
# 1. 读取你的数据(替换成实际读取方式)
# ----------------------
# 示例:从CSV读取,实际改成你的文件路径
df = pd.read_csv('your_traffic_data.csv')

# ----------------------
# 2. 转长格式并拆分数据
# ----------------------
# 保留原行索引,将所有列的数据转为行记录
long_df = df.reset_index().melt(id_vars='index', var_name='原列名', value_name='meter_second')

# 拆分meter和second,生成两列;处理可能的空值
def split_ms(x):
    if pd.isna(x) or x.strip() == '':
        return [pd.NA, pd.NA]
    parts = x.split(':')
    return parts if len(parts) == 2 else [pd.NA, pd.NA]

long_df[['meter', 'second']] = long_df['meter_second'].apply(split_ms).apply(pd.Series)

# 转换数据类型:meter转整数,second转浮点数
long_df['meter'] = pd.to_numeric(long_df['meter'], errors='coerce')
long_df['second'] = pd.to_numeric(long_df['second'], errors='coerce')

# ----------------------
# 3. 提取并排序所有唯一meter值
# ----------------------
sorted_meters = sorted(long_df['meter'].dropna().unique())

# ----------------------
# 4. 构建目标DataFrame
# ----------------------
# 转成宽表,缺失值自动填充NaN
new_df = long_df.pivot(index='index', columns='meter', values='second')

# 按排序后的meter值调整列顺序
new_df = new_df[sorted_meters]

# 重置索引名(可选,让表格更整洁)
new_df.index.name = None
new_df.columns.name = None

# 查看结果
print(new_df.head())

关键步骤说明

  • 转长格式:用melt把原DataFrame的每一列数据转为单行记录,避免逐列循环处理,适配任意列数。
  • 批量拆分:用apply批量处理所有meters:seconds字符串,同时处理空值和异常格式,避免报错。
  • 自动填充缺失值:pivot方法会自动将不存在的meter-second对填充为NaN,无需手动处理。
  • 适配大数据:这套方法基于pandas的矢量化操作,效率远高于循环,能轻松处理你提到的98列290行甚至更大的数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:48:11