首页 > 解决方案 > 在数据框中使用多个分隔符解析数据

问题描述

我有一个用户最喜欢的电影的数据框。在“最喜欢的电影”栏中是电影的名称和制片公司。我想将制片公司分隔到一个新列“制片公司”,但每一行在电影名称和制片公司名称之间都有不同的分隔符。请参阅下面的示例:

DataFrame 的小样本

任何人都知道我可以使用的任何库或任何示例吗?我已经尝试使用pandas.Series.str.extractpandas.Series.str.split但它们效果不佳。

标签: pythonpandas

解决方案


使用str.extract正则表达式效果很好

  1. 分隔符是,-,| 两边都有空格
  2. 实际上生成三个新列,第二个是删除的分隔符
  3. 连接回原始数据框并重命名第 1 列和第 3 列str.extract
  4. 无需保留原始列,但为了举例
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

推荐阅读