想象一下,你有一个dicts列表,每个dict的值都是值列表。像这样。
foods = [
{'apples' : ['sweet', 'round', 'red'] },
{'liver' : ['juicy', 'flat', 'nasty'] },
{'chocolate': ['tasty', 'block', 'dark' ] }
]
现在想象一个带有一列名称的简单数据框,如下所示:
menu = [
{'Name' : ['Sweet caramel bananas', 'Juicy farm salad', 'Hog face dark ice-cream destruction'] }
{'Price' : [20, 15, 32] }
]
yum_yums = pandas.DataFrame(menu)
假设您要为每个菜单项创建一个食物类别。例如,由于甜焦糖香蕉含有苹果,因此它应该将“苹果”键作为一个类别。
使用正则表达式将第一个列表中的dicts中的值与NAME列中的值相匹配,创建一个新的列,并将键作为指定的类别,最好的方法是什么?
最终结果如下:
menu = [
{'Name' : ['Sweet caramel bananas', 'Juicy farm salad', 'Hog face dark ice-cream destruction'] }
{'Price' : [20, 10, 32] }
{'Category' : ['apple', 'liver', 'chocolate'] }
]
food_w_cat = pandas.DataFrame(menu)
答案 0 :(得分:0)
您可以简单地遍历菜单和类别,而不是使用正则表达式,例如:
category = []
#iterate through menu names
for i_name in menu[0]['Name']:
#transform menu name to lowercase for comparison
i_name_lower = [i.lower() for i in i_name.split(' ')]
#enable multiple categories of food per menu
food_category = []
#iterate through food categories
for i_foods in foods:
key = list(i_foods.keys())[0]
if any([j in i_name_lower for j in i_foods[key]]):
food_category.append(key)
category.append(food_category)
menu.append({'category':category})
输出如下:
[{'Name': ['Sweet caramel bananas',
'Juicy farm salad',
'Hog face dark ice-cream destruction']},
{'Price': [20, 15, 32]},
{'category': [['apples'], ['liver'], ['chocolate']]}]