Znam pytania takie jak ten został poproszony o obfitość, ale nie znalazłem jednego, który odpowiada moje (może nadzorowałem coś, ale dałem go najlepiej;))). Oto problem: mam taką serię pandas:

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``

Teraz chcę usunąć wszystko w linii 2 przed wspornikiem. Ale ta część się zmienia za każdym razem, czasami to "ketki Gemahlen 6%", czasami jest całkowicie inna. Jedyną rzeczą, która jest stała w linii 2 przed "(" jest "%". Dużą możliwością byłoby "ABC de% (". Jak mogę usunąć tę część? Moje badania przyniosły mnie do operatora wyrażeń regularnych i kontynuując , do tej linii:

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

Ale teraz nie wiem, jak prawidłowo wypełnić wspornik kodu, więc wszystko jest nazwane przed "(weizenmehl". Może jest też inny sposób? My!

1
greenhorn 17 kwiecień 2021, 00:57

2 odpowiedzi

Najlepsza odpowiedź

Spróbuj str.extract:

df.loc[[2], 'ingredssplit'] = (
    df.loc[[2], 'ingredssplit'].str.extract('.*\((.*)')[0]
)
1
jcaliz 17 kwiecień 2021, 01:35

Dobra, znalazłem rozwiązanie. Dzięki JCaliz, część {X0}} była złota! To właśnie zrobiłem:

   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

Daje mi listę:

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

Które mogę łatwo przekształcić w dataframe np.:

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

Dzięki ludziom! :)

0
greenhorn 17 kwiecień 2021, 11:32