删除字符串的一部分 pandas DataFrame
Deleting part of a string pandas DataFrame
背景:
我有以下pandas数据框:
Objective:
推文列中的每个字段都包含推文(呃!)。我正在尝试做两件事:
- 删除'InSight'之前字符串中的所有字符。所以所有推文都将以'InSight sol...'
开头
- 从推文中提取日期(出现在 'InSight' 之前,并将其保存在名为 'Date' 的新列中。
我试过的:
我已经尝试过诸如 split_string = tweets_df.split("InSight", 1)
之类的东西,但我似乎无法编写任何可以拆分字符串的一部分的代码,而只是一个分隔符。
如有任何建议,我们将不胜感激。
尝试使用:
pandas.DataFrame.applymap
按元素将函数应用于 Dataframe。
此方法应用一个接受标量的函数,returns 将标量应用于 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')])
您需要将修剪后的列分配回原始列而不是进行子集化,而且 str.replace 方法似乎没有 to_replace 和值参数。它有 pat 和 repl 参数:
示例:
df["Date"] = df["Date"].str.replace("\s:00", "")
df
# ID Date
#0 1 8/24/1995
#1 2 8/1/1899
要在 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
背景:
我有以下pandas数据框:
Objective:
推文列中的每个字段都包含推文(呃!)。我正在尝试做两件事:
- 删除'InSight'之前字符串中的所有字符。所以所有推文都将以'InSight sol...' 开头
- 从推文中提取日期(出现在 'InSight' 之前,并将其保存在名为 'Date' 的新列中。
我试过的:
我已经尝试过诸如 split_string = tweets_df.split("InSight", 1)
之类的东西,但我似乎无法编写任何可以拆分字符串的一部分的代码,而只是一个分隔符。
如有任何建议,我们将不胜感激。
尝试使用:
pandas.DataFrame.applymap 按元素将函数应用于 Dataframe。
此方法应用一个接受标量的函数,returns 将标量应用于 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')])
您需要将修剪后的列分配回原始列而不是进行子集化,而且 str.replace 方法似乎没有 to_replace 和值参数。它有 pat 和 repl 参数:
示例:
df["Date"] = df["Date"].str.replace("\s:00", "")
df
# ID Date
#0 1 8/24/1995
#1 2 8/1/1899
要在 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