[英]Pandas series: Delete everything before a certain character, if "everything" changes everytime
我知道这样的问题已经被大量提出,但我还没有找到一个可以回答我的问题(也许我监督了某事,但我尽了最大努力;))。 这是问题所在:我有一个像这样的 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``
现在我想删除括号前第 2 行中的所有内容。 但这部分每次都在变化,有时是“Keks gemahlen 6%”,有时是完全不同的。 在“(”之前的第 2 行中唯一不变的是“%”。所以另一种可能性是“abc de% (”。我怎样才能删除那部分?我的研究把我带到了正则表达式运算符并继续,到这一行:
for line in ingredssplit:
print(re.sub())
但是现在我不知道如何正确填写代码括号,所以所有内容都在“(Weizenmehl”之前命名。也许还有另一种方式?另外,我如何删除“Ascorbinsäure”处的上标1?谢谢大家,有一个好我们!
尝试str.extract
:
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']
我可以轻松地将其转换为 dataframe 例如:
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
谢谢大家::)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.