【问题标题】:Remove digits from a list of strings in pandas column从 pandas 列中的字符串列表中删除数字
【发布时间】:2021-09-21 03:50:15
【问题描述】:

我有这个熊猫数据框

0  Tokens 
1: 'rice', 'XXX', '250g'
2: 'beer', 'XXX', '750cc'

这里的所有标记,“rice”、“XXX”和“250g”都在同一个字符串列表中,也在同一列中

我想删除数字,因为它与另一个词, 无法删除数字。

我试过这段代码:

def remove_digits(tokens):
    """
    Remove digits from a string
    """
    return [''.join([i for i in tokens if not i.isdigit()])]

df["Tokens"] = df.Tokens.apply(remove_digits)
df.head()

但它只是加入了字符串,我显然不想这样做。

我想要的输出:

0  Tokens
1: 'rice' 'XXX' 'g'
2: 'beer', 'XXX', 'cc'

【问题讨论】:

  • 这里的Tokens 是什么?你能提供构建df的句子吗?
  • 这是我清理的令牌所在的列。
  • 我认为这通过使用正则表达式回答了您的问题:stackoverflow.com/questions/40178364/…
  • 在您建议的解决方案中,您将一个列表Tokens 传递给您的函数,然后您需要在应用isdigit() 之前循环到字符串i 中的每个字符

标签: python pandas string digits


【解决方案1】:

这可以使用 pandas 方法实现,这些方法经过矢量化,比循环更有效。

import pandas as pd

df = pd.DataFrame({"Tokens": [["rice", "XXX", "250g"], ["beer", "XXX", "750cc"]]})

col = "Tokens"
df[col] = (
    df[col]
    .explode()
    .str.replace("\d+", "", regex=True)
    .groupby(level=0)
    .agg(list)
)
#             Tokens
# 0   [rice, XXX, g]
# 1  [beer, XXX, cc]

我们在这里使用:

【讨论】:

    【解决方案2】:

    这是一个简单的解决方案 -

    df = pd.DataFrame({'Tokens':[['rice', 'XXX', '250g'], 
                                 ['beer', 'XXX', '750cc']]})
    
    def remove_digits_from_string(s):
        return ''.join([x for x in s if not x.isdigit()])
    
    def remove_digits(l):
        return [remove_digits_from_string(s) for s in l]
    
    df["Tokens"] = df.Tokens.apply(remove_digits)
    
    

    【讨论】:

      【解决方案3】:

      您可以使用to_list + re.sub 来更新您的原始数据框。

      import re
      
      for index, lst in enumerate(df['Tokens'].to_list()):
        lst = [re.sub('\d+', '', i) for i in lst]
        df.loc[index, 'Tokens'] = lst
      
      print(df)
      

      输出:

          Tokens
      0   [rice, XXX, g]
      1   [beer, XXX, cc]
      

      【讨论】:

        猜你喜欢
        • 2021-12-28
        • 2015-10-25
        • 2018-07-30
        • 2020-12-14
        • 2018-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-24
        相关资源
        最近更新 更多