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

Python|Regex拆分DataFrame嵌套行而非列的技术问询

拆分嵌套行的解决方案

没问题,我来帮你搞定这个嵌套行的拆分问题!首先咱们得先明确这些数据的规律:每一条记录都是以数字1-7开头,跟着电影名称、发行方、票房等信息,最后以MM/DD/YY格式的日期结尾。基于这个规律,不管用Python结合正则,还是纯正则表达式,都能轻松把这些嵌套的行拆分开。

方法一:Python + 正则表达式(精准匹配完整条目)

这种方法直接匹配每个完整的行条目,准确率更高,适合数据格式固定的场景。

首先把原始数据存成字符串,然后用re.findall来捕获每个完整的行:

import re

# 原始嵌套数据字符串
raw_data = "1ItWB (NL)$327,481,7484,148$123,403,4194,1039/8/172The ExorcistWB$232,906,145-n/a-12/26/733Get OutUni.$176,040,6653,143$33,377,0602,7812/24/174The Blair Witch ProjectArt.$140,539,0992,538$1,512,054277/16/995The ConjuringWB (NL)$137,400,1413,115$41,855,3262,9037/19/136Paranormal ActivityPar.$107,918,8102,712$77,873129/25/097Interview with the VampireWB$105,264,6082,604$36,389,7052,60411/11/94"

# 正则模式:匹配以数字开头,直到MM/DD/YY日期结尾的完整条目
pattern = r'(\d{1}.*?\d{1,2}/\d{1,2}/\d{2})'
split_rows = re.findall(pattern, raw_data)

# 输出拆分后的每一行
for row in split_rows:
    print(row)

正则说明:

  • \d{1}:匹配每条记录开头的数字(1-7)
  • .*?:非贪婪匹配任意字符,避免过度匹配到下一条记录
  • \d{1,2}/\d{1,2}/\d{2}:匹配结尾的日期格式(比如9/8/17、12/26/73)

方法二:纯正则拆分(基于拆分位置)

如果不想捕获完整条目,也可以直接找到拆分的位置,用re.split来分割字符串:

import re

raw_data = "1ItWB (NL)$327,481,7484,148$123,403,4194,1039/8/172The ExorcistWB$232,906,145-n/a-12/26/733Get OutUni.$176,040,6653,143$33,377,0602,7812/24/174The Blair Witch ProjectArt.$140,539,0992,538$1,512,054277/16/995The ConjuringWB (NL)$137,400,1413,115$41,855,3262,9037/19/136Paranormal ActivityPar.$107,918,8102,712$77,873129/25/097Interview with the VampireWB$105,264,6082,604$36,389,7052,60411/11/94"

# 拆分位置:在一个数字前面,且这个数字后面不是斜杠(避免拆分日期里的数字)
split_rows = re.split(r'(?=\d{1}(?![/]))', raw_data)[1:]  # 去掉第一个空元素

# 输出结果
for row in split_rows:
    print(row)

正则说明:

  • (?=\d{1}(?![/])):正向前瞻匹配,找到后面跟着一个数字(且这个数字不是日期中的斜杠前的数字)的位置,在这里拆分字符串。

运行任意一种方法,你都会得到7条独立的行,每条对应原始的一条记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:23:10