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

Power Query清洗杂乱txt用户账单数据遇列错位问题求助

解决方案:Power Query 列溢出修复 + Python 替代方案

Power Query 修复列错位的步骤

你当前的问题核心是不同用户的收费项行数不一致,导致合并后列错位。需要在分组后给每个用户的行打上字段标签,再通过透视统一列结构:

  1. 回到分组后的子表处理环节:在第6步(按条件列分组)后,不要直接钻取合并,而是对每个分组的子表执行以下操作:

    • 添加自定义列,根据行内容判断所属字段:
      = Table.AddColumn(当前子表, "字段标签", each 
          if Text.Contains([你的单列名], "C:") then "客户ID"
          else if Text.Contains([你的单列名], "订阅者姓名") then "订阅者姓名"
          else if Text.Contains([你的单列名], "当前费用") then "当前费用"
          else if Text.Contains([你的单列名], "其他费用与信贷") then "其他费用与信贷"
          else if Text.Contains([你的单列名], "其他杂费") then "其他杂费"
          else if Text.Contains([你的单列名], "税费") then "税费"
          else null
      )
      
    • 过滤掉字段标签为null的行,只保留目标字段行
    • 执行透视列操作:选择字段标签作为"行",你的内容列作为"值",遇到重复标签时用Text.Combine(合并为文本)或List.Combine(保留列表)聚合内容
  2. 统一列结构:透视后每个子表的列名会自动对齐,空值会填充null,再用Table.Combine合并所有子表即可得到每行对应一个用户的规整数据。

Python 处理这类场景的优势与实现

对于非结构化、行数量不一致的账单数据,Python确实更灵活高效,尤其是1万行以上的数据集,自动化处理和正则匹配的精准度更高:

核心实现代码

import re
import pandas as pd

# 读取账单文件
with open('你的账单文件.txt', 'r', encoding='utf-8') as f:
    raw_content = f.read()

# 按分隔符拆分每个用户的账单块
user_blocks = [block.strip() for block in raw_content.split('----------') if block.strip()]

# 解析每个用户块的目标字段
parsed_data = []
for block in user_blocks:
    user_info = {}
    # 提取C:字段
    c_match = re.search(r'C:(.*)', block)
    if c_match:
        user_info['C:'] = c_match.group(1).strip()
    # 提取订阅者姓名(适配冒号中英文格式)
    name_match = re.search(r'订阅者姓名\s*[::]\s*(.*)', block)
    if name_match:
        user_info['订阅者姓名'] = name_match.group(1).strip()
    # 提取当前费用(多行内容合并)
    current_fee_lines = re.findall(r'当前费用.*?(?=\n其他费用与信贷|\n其他杂费|\n税费|$)', block, re.DOTALL)
    if current_fee_lines:
        user_info['当前费用'] = '\n'.join([line.strip() for line in current_fee_lines])
    # 提取其他费用与信贷
    other_credit_match = re.search(r'其他费用与信贷\s*[::]\s*(.*?)(?=\n其他杂费|\n税费|$)', block, re.DOTALL)
    if other_credit_match:
        user_info['其他费用与信贷'] = other_credit_match.group(1).strip()
    # 提取其他杂费
    misc_fee_match = re.search(r'其他杂费\s*[::]\s*(.*?)(?=\n税费|$)', block, re.DOTALL)
    if misc_fee_match:
        user_info['其他杂费'] = misc_fee_match.group(1).strip()
    # 提取税费
    tax_match = re.search(r'税费\s*[::]\s*(.*)', block)
    if tax_match:
        user_info['税费'] = tax_match.group(1).strip()
    parsed_data.append(user_info)

# 转换为DataFrame,自动对齐列
result_df = pd.DataFrame(parsed_data)
# 保存为CSV或Excel
result_df.to_excel('规整后的账单.xlsx', index=False)

优势说明

  • 正则匹配可以精准适配不同格式的行内容,无需依赖固定列位置
  • 自动处理空值,所有用户的字段会自动对齐到对应列
  • 处理1万行数据速度快,且可以轻松扩展到更大数据集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:46:14