#将食品调整至同样的份量(按100g计算) #正则表达式匹配几种不同的份量标注方式 p1 = re.compile(r'[(](.*?)[ g)]') p2 = re.compile(r'(.*?)[ ]') #定义函数,用于提取份量数据,也用于将字符串转化为整数,方便后面计算处理 def getLambda(x, p1, p2): try: val = float(re.findall(p1,x)[0]) except: #提取的是fl oz,也就是美制液体盎司,需要乘以29.57转换为ml val = float(re.findall(p2,x)[0]) * 29.57 return val #调整food数据集,计算每100克的卡路里,脂肪,碳水化合物,钠,膳食纤维,蛋白质 per100_food = food.iloc[:,:] per100_food['分量'] = per100_food['分量'].astype(str) #应用提取函数 per100_food["分量"] = per100_food["分量"].apply(lambda x: getLambda(x, p1, p2)),报错:list out of range
时间: 2024-03-09 16:44:23 浏览: 23
`list index out of range`错误表示在使用`re.findall()`函数时,未能找到匹配的模式,导致返回的是空列表,而当我们使用空列表中的索引时,就会出现此错误。
您可以在函数中添加一些调试信息,以确定是哪个字符串导致了此错误。例如,您可以在函数中添加以下代码:
```python
def getLambda(x, p1, p2):
try:
val = float(re.findall(p1,x)[0])
except:
print("Error in p1: ", x) # 添加调试信息
val = float(re.findall(p2,x)[0]) * 29.57
return val
```
这样,当`re.findall(p1,x)`返回空列表时,就会打印出错误信息,您可以检查这些字符串并确定如何修复它们。
相关问题
我的代码:#将食品调整至同样的份量(按100g计算) #正则表达式匹配几种不同的份量标注方式 p1 = re.compile(r'(') p2 = re.compile(r'(.*?)[ ]') #定义函数,用于提取份量数据,也用于将字符串转化为整数,方便后面计算处理 def getLambda(x, p1, p2): try: val = float(re.findall(p1,x)[0]) except: #提取的是fl oz,也就是美制液体盎司,需要乘以29.57转换为ml val = float(re.findall(p2,x)[0]) * 29.57 return val #调整food数据集,计算每100克的卡路里,脂肪,碳水化合物,钠,膳食纤维,蛋白质 per100_food = food.iloc[:,:] #应用提取函数 per100_food["分量"] = per100_food["分量"].apply(lambda x: getLambda(x, p1, p2)) #计算每百克含量 per100_food["每百克卡路里"] = (per100_food['卡路里']/per100_food["分量"]) * 100 per100_food["每百克总脂肪"] = (per100_food['总脂肪']/per100_food["分量"]) * 100 per100_food["每百克碳水化合物"] = (per100_food['碳水化合物']/per100_food["分量"]) * 100 per100_food["每百克钠"] = (per100_food['钠']/per100_food["分量"]) * 100 per100_food["每百克膳食纤维"] = (per100_food['膳食纤维']/per100_food["分量"]) * 100 per100_food["每百克蛋白质"] = (per100_food['蛋白质']/per100_food["分量"]) * 100 #仅保留包含这些每百克的数据信息,类型和食品名 per100_food = per100_food[['Item','Category','每百克卡路里', '每百克总脂肪', '每百克碳水化合物', '每百克钠', '每百克膳食纤维', '每百克蛋白质']] per100_food,报错:list out of range
我看到你的代码中的正则表达式还是有问题的,需要进行修改。请将以下两行代码:
```python
p1 = re.compile(r'(')
p2 = re.compile(r'(.*?)[ ]')
```
修改为:
```python
p1 = re.compile(r'[(](.*?)[ g)]')
p2 = re.compile(r'(.*?)[ ]')
```
另外,你的代码最后一行`per100_food,`也是有问题的,需要删除逗号。修改后的代码如下:
```python
#将食品调整至同样的份量(按100g计算)
#正则表达式匹配几种不同的份量标注方式
p1 = re.compile(r'[(](.*?)[ g)]')
p2 = re.compile(r'(.*?)[ ]')
#定义函数,用于提取份量数据,也用于将字符串转化为整数,方便后面计算处理
def getLambda(x, p1, p2):
try:
val = float(re.findall(p1,x)[0])
except:
#提取的是fl oz,也就是美制液体盎司,需要乘以29.57转换为ml
val = float(re.findall(p2,x)[0]) * 29.57
return val
#调整food数据集,计算每100克的卡路里,脂肪,碳水化合物,钠,膳食纤维,蛋白质
per100_food = food.iloc[:,:]
#应用提取函数
per100_food["分量"] = per100_food["分量"].apply(lambda x: getLambda(x, p1, p2))
#计算每百克含量
per100_food["每百克卡路里"] = (per100_food['卡路里']/per100_food["分量"]) * 100
per100_food["每百克总脂肪"] = (per100_food['总脂肪']/per100_food["分量"]) * 100
per100_food["每百克碳水化合物"] = (per100_food['碳水化合物']/per100_food["分量"]) * 100
per100_food["每百克钠"] = (per100_food['钠']/per100_food["分量"]) * 100
per100_food["每百克膳食纤维"] = (per100_food['膳食纤维']/per100_food["分量"]) * 100
per100_food["每百克蛋白质"] = (per100_food['蛋白质']/per100_food["分量"]) * 100
#仅保留包含这些每百克的数据信息,类型和食品名
per100_food = per100_food[['Item','Category','每百克卡路里', '每百克总脂肪', '每百克碳水化合物', '每百克钠', '每百克膳食纤维', '每百克蛋白质']]
```
请尝试修改后再次运行代码看是否可以成功运行。
正则表达式re.compile
re.compile() 是 Python 中用于编译正则表达式的函数,它将正则表达式字符串编译成一个正则表达式对象,可以用于匹配字符串。
使用 re.compile() 的好处是可以将正则表达式的模式编译成一个对象,然后在需要匹配的字符串中使用这个对象进行匹配,这样可以提高匹配效率。
例如:
```
import re
pattern = re.compile(r'\d+')
result = pattern.findall('hello 123 world 456')
print(result)
```
输出:
```
['123', '456']
```
在上面的例子中,我们先使用 re.compile() 函数将正则表达式字符串编译成一个正则表达式对象 pattern,然后使用 pattern.findall() 方法在字符串中查找匹配的内容。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)