Pandas系列:删除某个字符之前的所有内容,如果“所有内容”每次都更改

2024-06-28 20:07:57 发布

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

我知道像这样的问题已经被问了很多,但我还没有找到一个能回答我的问题(也许我监督了某件事,但我尽了全力)。 问题是:我有一个像这样的熊猫系列:

ingredssplit
    0                          MAGERMILCH 65%
    1                                  Wasser
    2            Keks gemahlen 6% (WEIZENMEHL
    3                   Traubensaftkonzentrat
    4                                 Palmöl)
    5                                  Stärke
    6                              Maiskeimöl
    7                                  Zucker
    8     Antioxidationsmittel Ascorbinsäure¹
    9                  Thiamin (Vitamin B1). 
    dtype: object``

现在我想删除括号前第2行中的所有内容。但这部分每次都会改变,有时是“Keks gemahlen 6%”,有时是完全不同的。在“(”之前的第2行中唯一不变的是“%”。所以另一种可能性是“abc de%”。 如何删除该部分?我的研究将我带到正则表达式操作符,并继续到这一行:

for line in ingredssplit:
print(re.sub())

但是现在我不知道如何正确地填充代码括号,所以所有的东西都是在“(Weizenmehl)”之前命名的。也许还有另一种方法? 另外,如何删除“抗坏血酸”的上标1? 谢谢各位,祝你们玩得愉快


Tags: 括号stpalmwasserrkemaiskeimtraubensaftkonzentratweizenmehl
2条回答

试试^{}

df.loc[[2], 'ingredssplit'] = (
    df.loc[[2], 'ingredssplit'].str.extract('.*\((.*)')[0]
)

好吧,我找到了解决办法。谢谢jcaliz,'.*\(部分是金色的! 这就是我所做的:

   item1 = []
   for line in ingredssplit:
       line=re.sub('.*\(', '', line)
       item1.append(line)  
        
    def remove_punc(string):
        punc = '''!()-[]{};:'"\,<>./?@#$^&*_~'''
        for ele in string:  
            if ele in punc:  
                string = string.replace(ele, "") 
        return string
    lis = [remove_punc(i) for i in item1]
    lis = list(filter(None, lis))
    lis=[i.lstrip() for i in lis]
    lis=[i.rstrip() for i in lis]
    lis

这给了我一个清单:

['MAGERMILCH 65%',
 'Wasser',
 'WEIZENMEHL',
 'Traubensaftkonzentrat',
 'Palmöl',
 'Stärke',
 'Maiskeimöl',
 'Zucker',
 'Antioxidationsmittel Ascorbinsäure¹',
 'Vitamin B1']

我可以轻松地将其转换为数据帧,例如:

lis=pd.DataFrame(lis)
lis
                 0

0   MAGERMILCH 65%
1   Wasser
2   WEIZENMEHL
3   Traubensaftkonzentrat
4   Palmöl
5   Stärke
6   Maiskeimöl
7   Zucker
8   Antioxidationsmittel Ascorbinsäure¹
9   Vitamin B1

谢谢大家!:)

相关问题 更多 >