【问题标题】:Remove text after a delimiter (parenthesis) in python在python中删除分隔符(括号)后的文本
【发布时间】:2021-07-31 03:56:13
【问题描述】:

我正在尝试删除“(”分隔符之后的文本,首先我想计算至少有一个“(”的行,然后删除此分隔符之后的文本,包括分隔符。

包含文本的列是“国家/地区”,如下所示:

Micronesia (Federated States of)

我希望得到这样的结果:

Micronesia

这是我尝试计算的行数

energy['Country'].value_counts()[['(']].sum

它返回了这个错误:

"None of [Index(['('], dtype='object')] are in the [index]"

为了在分隔符后删除 xt 我试过这个:

energy['Country'] = energy['Country'].split("(", 1)

它返回了这个错误:

AttributeError: 'Series' object has no attribute 'split'

我该如何解决这个问题?

【问题讨论】:

标签: python pandas


【解决方案1】:

那是因为您试图拆分系列而不是行的值。 而不是使用这个:

energy['Country'] = energy['Country'].apply(lambda x:x.split('(',1))

这应该抓住“(”分隔符之后的内容,如果你想在它之后删除,你可以使用它:

energy['Country'] = energy['Country'].apply(lambda x:x.replace(x.split('(',1),''))

【讨论】:

    【解决方案2】:

    您可以使用str slicing 对每一行进行迭代并删除 '(' 之后的文本:

    p_count=0
    for index,row in energy.iterrows():
        if '(' in row['Country']:
            p_count+=1    
            row['Country']=row['Country'][:row['Country'].find('(')].strip()
    

    【讨论】:

      【解决方案3】:

      您可以将str.split 应用于列,然后使用.str[0] 获取第一个元素并使用str.strip 删除前导/尾随空格:

      df = pd.DataFrame({'country': ['Micronesia (Federated States of)']})
      
      df['country'] = df['country'].str.split('(').str[0].str.strip()
      df
      

      输出:

            country
      0  Micronesia
      

      另一个(不那么冗长的)选项是str.extract

      df['country'] = df['country'].str.extract('(.*)\s*\(')
      

      【讨论】:

      • 嗨,它给了我这个错误:Can only use .str accessor with string values!如果我检查列类型它说对象,我试图通过应用以下方法将其转换为字符串:energy.Country.apply(str) 但它仍然是对象,我如何将其转换为字符串?跨度>
      • @JhoanZuluaga 请尝试df['country'].astype(str).str.extract('(.*)\s*\(')
      • 它可以工作@perl,唯一缺少的是字符串末尾有空格,知道吗? “玻利维亚”而不是“玻利维亚”
      • @JhoanZuluaga 让我们试试这个:df['country'].astype(str).str.extract('([^\(]*)', expand=False).str.strip()
      • @JhoanZuluaga 尝试添加str.replace('\d', '')
      【解决方案4】:

      试试这个。它将在每一行而不是每一列上执行此操作

      for index,row in reviews.iterrows():
          print(energy['Country'].split("(")[0])
      

      如果您想在特定行上执行此操作,您可以这样做

      print(energy['Country'][0].split("(")[0])
      

      【讨论】:

        【解决方案5】:

        .str.replace 与正则表达式一起使用。

        例如:

        energy['Country'] = energy['Country'].str.replace(r"(\(.*\))", "")
        

        【讨论】:

        • 嗨,它给了我这个错误:Can only use .str accessor with string values!如果我检查列类型它说对象,我试图通过应用以下方法将其转换为字符串:energy.Country.apply(str) 但它仍然是对象,我如何将其转换为字符串?跨度>
        • energy['Country'].astype(str).str.replace(r"(\(.*\))", "")?
        猜你喜欢
        • 2017-02-26
        • 1970-01-01
        • 2016-02-07
        • 1970-01-01
        • 1970-01-01
        • 2021-08-21
        • 2016-12-25
        • 2018-06-08
        • 1970-01-01
        相关资源
        最近更新 更多