我正在研究一种无监督的机器学习算法,用于研究大麻数据,以提供类似菌株的建议。我遇到了一个小障碍,那就是CBD与THC的比率(这是一个超级导入数据点)被隐藏在“描述”列中,而其措辞却没有真正的一致性。有时它的“ X:Y CBD / THC比”,有时是“大约X:Y的THC对CBD的比”,有时还会在其中添加其他单词,从编码的角度来看,这使其更加混乱。
我目前的策略是制作一条if语句,该语句搜索所有描述以提取数据,但是我不知道如何使它起作用。这是我正在使用的基本思想。
strain_breakdown['THC/CBD Ratio'] = 0
for s in strain_data:
if strain_data['Description'].str.contains(f'THC:CBD ratio of about {int}:{int}'):
strain_breakdown['THC/CBD Ratio'] = int/int
很显然,上面的代码不起作用,但是我正在尝试寻找可能的类似内容。
我的计划是在elif语句之后引用该语句,该语句引用在不同描述中用其他方式表达的语句,并单独列出各列;如果THC与CBD的比率以及CBD与THC的比率的语句,则只需要找到一种方法提取数字。任何人有任何想法吗?
答案 0 :(得分:2)
您可以对包含这样的命名组的正则表达式使用“提取”功能:
df = strain_data.Description.str.extract(r'THC:CBD ratio of about (?P<THC>[\d+]):(?P<CBD>[\d+])') # it returns a dataframe with two columns named "THC" and "CBD" with the values of THC and CBD if found in the description or with NaN if not found
strain_breakdown['THC/CBD Ratio'] = df.THC / df.CBD
您可以使用正则表达式来避免打算在此之后执行的elif语句。