如果满足条件,如何将设置值分配给列?
How to assign a set value to a column if a condition is met?
我有一组产品需要分配 google 分类代码。我需要将这些代码添加到大约 213000 种产品中。我在 pandas 中输入了一个 7000 的小样本,看看我是否可以写一些东西到 运行 关闭关键字,如果找到关键字,则将代码分配给列。
总的来说,我仍在思考 Python 和 Pandas。
我想如果我写一个 if 语句,声明如果它遇到一个关键字,则将分类代码写入包含有效关键字的每一行的 googlecode 列。但是我不知道怎么写。我尝试了一些变体,但一直碰壁。从哪里开始的任何建议都很好,甚至是关于如何做这样的事情的教程建议。
我目前的代码如下:
import pandas as pd
import numpy as np
product_data = pd.read_csv(
r'C:\Users\mathewo\Documents\Python\Google sheet match.csv',
dtype={
'productcode': 'string',
'category': 'string'
}
)
product_data.dropna(inplace = True)
product_data["googlecode"] = ""
brake_code = [2977]
mirror_code = [2642]
generic_code = [5613]
lights_code = [3318]
suspension_code = [2935]
tyres_code = [911]
if product_data['category'].str.contains('BRAKE').any():
product_data['googlecode'].string.contains('BRAKE').any = brake_code
当前图书:
想象一下这个输入数据框:
df = pd.DataFrame({'productcode': ['AA7690', 'AB0105', 'XYZ123', 'ZZ5103'],
'category': ['TRUCK & TAILER, AIR SYSTEM, ', 'TRUCK & TAILER, AIR SYSTEM, ', 'BLAHBLAH BRAKE BLAH', 'ACCESSORIES, BRANDED MERCHANDISE']
})
productcode category
0 AA7690 TRUCK & TAILER, AIR SYSTEM,
1 AB0105 TRUCK & TAILER, AIR SYSTEM,
2 XYZ123 BLAHBLAH BRAKE BLAH
3 ZZ5103 ACCESSORIES, BRANDED MERCHANDISE
您可以使用此自定义功能搜索产品代码并将其附加为新列
import re
codes = {'BRAKE': 2977, 'TRUCK': 1234, 'MIRROR': 2642}
regex_code = re.compile('|'.join(codes))
def search(s):
m = regex_code.search(s)
if m and m.group() in codes:
return codes[m.group()]
return 0
df['googlecode'] = df.category.apply(search)
输出:
productcode category googlecode
0 AA7690 TRUCK & TAILER, AIR SYSTEM, 1234
1 AB0105 TRUCK & TAILER, AIR SYSTEM, 1234
2 XYZ123 BLAHBLAH BRAKE BLAH 2977
3 ZZ5103 ACCESSORIES, BRANDED MERCHANDISE 0
如果您希望在没有匹配项时使用 NaN 而不是 0,请删除函数中的 return 0
尝试:
conditions=['BRAKE','MIRROR','GENRIC','LIGHTS','SUSPENSION','TYRES']
labels=[2977,2642,5613,3318,2935,911]
最后使用str.extract()
和map()
:
pat='('+'|'.join(conditions)+')'
product_data['googlecode']=product_data['category'].str.extract(pat,expand=False)
product_data['googlecode']=product_data['googlecode'].map(dict(zip(conditions,labels)))
我有一组产品需要分配 google 分类代码。我需要将这些代码添加到大约 213000 种产品中。我在 pandas 中输入了一个 7000 的小样本,看看我是否可以写一些东西到 运行 关闭关键字,如果找到关键字,则将代码分配给列。
总的来说,我仍在思考 Python 和 Pandas。
我想如果我写一个 if 语句,声明如果它遇到一个关键字,则将分类代码写入包含有效关键字的每一行的 googlecode 列。但是我不知道怎么写。我尝试了一些变体,但一直碰壁。从哪里开始的任何建议都很好,甚至是关于如何做这样的事情的教程建议。
我目前的代码如下:
import pandas as pd
import numpy as np
product_data = pd.read_csv(
r'C:\Users\mathewo\Documents\Python\Google sheet match.csv',
dtype={
'productcode': 'string',
'category': 'string'
}
)
product_data.dropna(inplace = True)
product_data["googlecode"] = ""
brake_code = [2977]
mirror_code = [2642]
generic_code = [5613]
lights_code = [3318]
suspension_code = [2935]
tyres_code = [911]
if product_data['category'].str.contains('BRAKE').any():
product_data['googlecode'].string.contains('BRAKE').any = brake_code
当前图书:
想象一下这个输入数据框:
df = pd.DataFrame({'productcode': ['AA7690', 'AB0105', 'XYZ123', 'ZZ5103'],
'category': ['TRUCK & TAILER, AIR SYSTEM, ', 'TRUCK & TAILER, AIR SYSTEM, ', 'BLAHBLAH BRAKE BLAH', 'ACCESSORIES, BRANDED MERCHANDISE']
})
productcode category
0 AA7690 TRUCK & TAILER, AIR SYSTEM,
1 AB0105 TRUCK & TAILER, AIR SYSTEM,
2 XYZ123 BLAHBLAH BRAKE BLAH
3 ZZ5103 ACCESSORIES, BRANDED MERCHANDISE
您可以使用此自定义功能搜索产品代码并将其附加为新列
import re
codes = {'BRAKE': 2977, 'TRUCK': 1234, 'MIRROR': 2642}
regex_code = re.compile('|'.join(codes))
def search(s):
m = regex_code.search(s)
if m and m.group() in codes:
return codes[m.group()]
return 0
df['googlecode'] = df.category.apply(search)
输出:
productcode category googlecode
0 AA7690 TRUCK & TAILER, AIR SYSTEM, 1234
1 AB0105 TRUCK & TAILER, AIR SYSTEM, 1234
2 XYZ123 BLAHBLAH BRAKE BLAH 2977
3 ZZ5103 ACCESSORIES, BRANDED MERCHANDISE 0
如果您希望在没有匹配项时使用 NaN 而不是 0,请删除函数中的 return 0
尝试:
conditions=['BRAKE','MIRROR','GENRIC','LIGHTS','SUSPENSION','TYRES']
labels=[2977,2642,5613,3318,2935,911]
最后使用str.extract()
和map()
:
pat='('+'|'.join(conditions)+')'
product_data['googlecode']=product_data['category'].str.extract(pat,expand=False)
product_data['googlecode']=product_data['googlecode'].map(dict(zip(conditions,labels)))