从Python中删除独立的数字字符串

2024-06-26 13:49:55 发布

您现在位置:Python中文网/ 问答频道 /正文

有很多类似的问题,但我还没有找到解决问题的办法。我有一个具有以下结构/形式的数据帧:

   col_1
0  BULKA TARTA 500G KAJO 1
1  CUKIER KRYSZTAL 1KG KSC 4
2  KASZA JĘCZMIENNA 4*100G 2 0.92
3  LEWIATAN MAKARON WSTĄŻKA 1 0.89

但是,我想达到这样的效果:

^{pr2}$

所以我想删除独立的自然数和十进制数,但是保留字符串中的数字和字母。在

我试图使用df.col_1.str.isdigit().replace([True, False],[np.nan, df.col_1]),但它只用于比较整个单元格是否为数字。在

你有什么办法吗?或者用空格来分隔列,然后进行比较?在


Tags: 数据df数字col结构形式解决问题办法
3条回答

是的,你可以

def no_nums(col):
    return ' '.join(filter(lambda word:word.replace('.','').isdigit()==False, col.split()))
df.col_1.apply(no_nums)

这将从每个完全由数字组成的值中筛选出单词,
可能包含小数点。
如果您想过滤掉像1,000这样的数字,只需为','再添加一个replace

我们可以创建一个函数来转换成float。如果失败,我们返回True(而不是_float)

import pandas as pd

df = pd.DataFrame({"col_1" : ["BULKA TARTA 500G KAJO 1",
                              "CUKIER KRYSZTAL 1KG KSC 4",
                              "KASZA JĘCZMIENNA 4*100G 2 0.92",
                              "LEWIATAN MAKARON WSTĄŻKA 1 0.89"]})

def is_not_float(string):
    try:
        float(string)
        return False
    except ValueError:  # String is not a number
        return True

df["col_1"] = df["col_1"].apply(lambda x: [i for i in x.split(" ") if is_not_float(i)])

df

或者效仿我的同僚:呃。然而,这将治疗130。作为一个数字。在

^{pr2}$

退货

                          col_1
0    [BULKA, TARTA, 500G, KAJO]
1  [CUKIER, KRYSZTAL, 1KG, KSC]
2   [KASZA, JĘCZMIENNA, 4*100G]
3  [LEWIATAN, MAKARON, WSTĄŻKA]

当然可以

你可以用正则表达式。在

import re
df.col_1 = re.sub("\d+\.?\d+?", "",  df.col_1)

相关问题 更多 >