【问题标题】:Deleting part of a string pandas DataFrame删除部分字符串 pandas DataFrame
【发布时间】:2020-07-17 02:47:25
【问题描述】:
背景:
我有以下熊猫数据框:
目标:
推文列中的每个字段都包含推文(呵呵!)。我正在尝试做两件事:
- 从字符串中删除“InSight”之前的所有字符。所以所有推文都会以'InSight sol...'
开头
- 从推文中提取日期(出现在“InSight”之前,并将其保存在名为“Date”的新列中。
我的尝试:
我已经尝试过诸如split_string = tweets_df.split("InSight", 1) 之类的东西,但我似乎无法编写任何可以分割字符串的一部分的代码,而只是一个分隔符。
任何建议将不胜感激。
【问题讨论】:
标签:
python
pandas
dataframe
jupyter-lab
【解决方案1】:
尝试使用:
pandas.DataFrame.applymap
按元素将函数应用于 Dataframe。
此方法应用一个函数,该函数接受并返回一个标量到 DataFrame 的每个元素。
new_df = df.filter(['tweet']).applymap(lambda x: x[x.find('InSight'):])
dates_df = df.filter(['tweet']).applymap(lambda x: x[x.find('-') + 1:x.find('InSight')])
【解决方案2】:
您需要将修剪后的列分配回原始列而不是进行子集化,而且 str.replace 方法似乎没有 to_replace 和 value 参数。它有 pat 和 repl 参数:
示例:
df["Date"] = df["Date"].str.replace("\s:00", "")
df
# ID Date
#0 1 8/24/1995
#1 2 8/1/1899
【解决方案3】:
要在InSight 之后提取字符串,您可以使用正向前瞻正则表达式
df['text'] = df['tweet'].str.replace('.*(?=InSight)', '', regex=True)
要以提供的格式提取日期,请使用 str.extract 和正则表达式的正则表达式
df['date'] = df['tweet'].str.extract('(?<=-)(\w{3} \d{2})')
输出
tweet text date
0 Mars Weather@Marsweatherreport-Jul 15InSight s... InSight sol 58 Jul 15