从熊猫列中的字符串列表中删除数字

时间:2021-07-11 20:00:36

标签: python pandas string digits

我有这个熊猫数据框

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'

3 个答案:

答案 0 :(得分: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]

这里我们使用:

答案 1 :(得分:0)

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

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)

答案 2 :(得分:0)

您可以使用 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]