【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-02
        • 1970-01-01
        • 2017-03-18
        • 2020-10-12
        • 1970-01-01
        • 2018-03-16
        • 1970-01-01
        相关资源
        最近更新 更多