python - 在数据框中使用多个分隔符解析数据
问题描述
我有一个用户最喜欢的电影的数据框。在“最喜欢的电影”栏中是电影的名称和制片公司。我想将制片公司分隔到一个新列“制片公司”,但每一行在电影名称和制片公司名称之间都有不同的分隔符。请参阅下面的示例:
任何人都知道我可以使用的任何库或任何示例吗?我已经尝试使用pandas.Series.str.extract和pandas.Series.str.split但它们效果不佳。
解决方案
使用str.extract
正则表达式效果很好
- 分隔符是,-,| 两边都有空格
- 实际上生成三个新列,第二个是删除的分隔符
- 连接回原始数据框并重命名第 1 列和第 3 列
str.extract
- 无需保留原始列,但为了举例
data = '''User~Favorite Movie
Allan Michel~The Dark Knight, Harry Potter and the Sorcerer's Stone, Joker | Warner Bros
Peter Smith~Spider-Man 2 by Columbia Pictures
George Moore~Spider-Man 2, Spider-Man 3, Venom - Columbia Pictures'''
da = [[i.strip() for i in l.split("~")] for l in data.split("\n")]
df = pd.DataFrame(da[1:], columns=da[0])
df.join(df["Favorite Movie"].str.extract(r"(.*)[ ](by|-|\|)[ ](.*)").drop([1], axis=1)\
.rename(columns={0:"Title", 2: "Studio"}))
输出
User Favorite Movie Title Studio
0 Allan Michel The Dark Knight, Harry Potter and the Sorcerer... The Dark Knight, Harry Potter and the Sorcerer... Warner Bros
1 Peter Smith Spider-Man 2 by Columbia Pictures Spider-Man 2 Columbia Pictures
2 George Moore Spider-Man 2, Spider-Man 3, Venom - Columbia P... Spider-Man 2, Spider-Man 3, Venom Columbia Pictures
推荐阅读
- python - 在 python 多处理中从 bash 调用另一个应用程序非常慢
- python - 如何在 PyUsb 中绑定/取消绑定 USB 设备?
- botframework - 如何扩展 MS Health Bot 现有场景?
- android - 访问令牌的 LinkedIn Android SDK 问题:未设置访问令牌。同时授权
- xamarin - 允许使用 xamarin 表单重复值滑块条目
- javascript - 如何针对 FCC 环境优化项目 euler #10 问题?
- amazon-web-services - 回形针图像旋转不适用于 s3
- javascript - 使用 XmlHttpRequest/ajax 发布表单会更改有效负载
- memory - 如何减少“cma_alloc”的延迟?
- python - 有缺陷的迭代 DFS 实现