如何在关键字和日期前后提取文本

时间:2019-07-30 22:46:05

标签: python pandas text

我想在数据框列中分开作者姓名,域名和日期。

而 .split(“ in”) 可以很好地分隔左侧的作者姓名,我也想分隔域和日期,而域名和日期不能通过空格符号分隔。

from pandas import DataFrame

Cars = {'Details': ['Daniel Jacobs in HackeMoon.comJul 31, 2017','Wil Zelk in websiteabc.deJan 28','Wil Zelk in anotherwebsite.chJan 28, 2019'],
        }

df = DataFrame(Cars,columns= ['Details'])

print(df)
df = df.Details.str.split(" in ", expand=True)
print(df)

1 个答案:

答案 0 :(得分:4)

您可以结合使用正则表达式尝试使用s = df.stack().groupby(level=1).unique() Out[279]: Firm_A [A, B, C] Firm_B [None] Firm_C [C, A, B, D] Firm_D [C, A] dtype: object pd.DataFrame(s.tolist(), index=df.columns).T.reindex(df.index) Out[280]: Firm_A Firm_B Firm_C Firm_D 0 A None C C 1 B None A A 2 C None B None 3 None None D None

DataFrame.str.extract

这将产生:

df['Details'].str.extract(r'(?P<author>.*?) in (?P<url>.*)(?P<date>[A-Z].*)', expand=True)

为分隔字符串,我使用以下假设:

  • 名称和网址由“ in”中的“
  • 日期的第一个字符(只有第一个字符)是大写字母(因此,字符串中的最后一个大写字符表示日期部分的第一个字符)