【发布时间】:2018-08-26 06:09:18
【问题描述】:
我有一个包含 5 个嵌套行的数据框(全部包含以下数据)
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
我想要做的是拆分成新的行;不是列。
我尝试过这样的事情:
df["Box_Office"].str.split(r'([\d][A-Z][a-z]*)', expand=True)
df["Box_Office"].str.split(r'([\d][A-Z][a-z]*)', expand=True).melt()
df["Box_Office"].str.split(r'([\d][A-Z][a-z]*)', expand=True).stack().to_frame()
正则表达式在每个新等级处分裂(例如:2The、3Get、4The)。我只希望拆分创建新行,而不是列。正则表达式需要一些工作,但我很高兴自己完成这些工作。
我可以融化数据框来创建行,但是清理变得很耗时(如果没有其他方法,很高兴沿着这条路走下去)。
Stacking 更接近,但它分成单独的行(这自然与我的正则表达式有关)。这感觉最接近,但我找不到一个正则表达式模式来捕捉这个[还]。
理想的结果如下,但我真正需要的只是标题和总价
Rank Title Studio Gross Theatres Date
1 IT WB $327,481,748 4,138 9/8/17
2 The Exorcist WB $232,906,145 NA 12/26/73
以下内容更接近一点
df["Box_Office"].str.split(r'(\$[0-9,/]*)', expand=True).stack().to_frame()
提取或拆分是否可以跨行而不是跨列向下扩展?
【问题讨论】:
-
Arrgghh,你的方法不好!您的数据来自一个网站(可能是boxofficemojo.com)。使用 html 解析器 (beautifulsoup) 来提取已经结构化的信息。使用 html 结构,而不是尝试使用正则表达式拆分连接的文本。
-
你好 - 我使用 BeautifulSoup 来获取这些数据 - 这是返回的结构。如果有帮助,我可以发送我的代码吗?
-
好的,不是为每个 tr 标签(连接所有文本节点)提取文本内容,而是遍历 td 标签以分别获取每个 tr 标签的每个信息。
-
当然,您可以在问题中添加其他信息。但是,请注意只发布代码中有趣的部分(如果代码很长,则不要发布所有代码)。