【发布时间】:2019-11-29 19:44:37
【问题描述】:
我有一个带有多个列的 pandas 数据框和一个带有键和值作为列表的字典。在 df 一列表示描述,我需要查看此描述并检查它是否与字典列表中的值之一匹配。
这是字典的摘录:
clothing_types = {'T-Shirt': ['t-shirt', 'shirt', 'tee'],
'Tank Top': ['tank top', 'mesh', 'top', 'tank'],
'Socks': ['socks'],
'Hat': ['cap'],
'Trainers': ['trainers', 'snickers', 'shoes', 'furylite
contemporary'}
这是专栏:
0 UNDER ARMOUR LADIES FLY-BY STRETCH MESH TANK TOP
1 UNDER ARMOUR LADIES SPEEDFORM NO SHOW SOCKS
2 UNDER ARMOUR LADIES SPEEDFORM NO SHOW SOCKS
3 UNDER ARMOUR LADIES PLAY UP SHORTS
4 REEBOK LADIES CLASSIC LEATHER MID TRAINERS
5 UNDER ARMOUR MENS Spring Performance Oxford SHIRT
6 UNDER ARMOUR LADIES HEATGEAR ALPHA SHORTY SHORTS
7 ADIDAS LADIES PRO TANK
8 REEBOK LADIES ONE SERIES V NECK T-SHIRT
9 REEBOK LADIES DF LONG BRA
10 NIKE LADIES BASELINE TENNIS SKIRT
11 UNDER ARMOUR MENS ESCAPE 7" SOLID SHORTS
12 UNDER ARMOUR LADIES FLY-BY STRETCH MESH TANK TOP
我可以通过正常的for循环进行比较:
for item in self.original_file['Product Description'].tolist():
found = False
for item_type, type_descriptions in clothing_types.items():
for description in type_descriptions:
if description.upper() in item.upper():
# print(item_type, item)
found = True
break
if not found:
print('NOT FOUND', item)
并尝试使用 np.where 来做到这一点:
for item_type, type_descriptions in clothing_types.items():
for description in type_descriptions:
self.original_file['Category'] = np.where(description.upper() in self.original_file['Product Description'], item_type, 'None')
但它会用最后一个值比较替换值,这使得列值始终为无
预期如果“衬衫”在描述“T-Shirt”(这是字典的一个键)中将被填充到新列 - 类别中
【问题讨论】:
-
如果匹配到了怎么办?什么是预期的输出?真/假一列?
-
我需要填充字典的键,所以如果有衬衫匹配 -> T-Shirt 将被填充
标签: pandas python-2.7 csv numpy python-2.6