我有一本字典,其中包含与品牌名称相关联的产品线代码,我正在尝试用字典中的相关品牌名称映射一个名为“ Brand”的新列,我的问题是当我输出文件时,部分返回;
line_codes = {1:'brand name1', 2:'brand name2', 'AD':'brand name3', 'MN':'brand name4'}
data = pd.read_csv('datafile.csv', names=['SKU','Descr','LineCode' 'Price','QTY']
data['Brand'] = data.LineCode.map(line_codes)
new_data = data
new_data.to_csv('datafile_out.csv', index=None)
输出:
如您所见,由于某种原因,它并没有引入行代码1的所有品牌名称,但引入了部分品牌名称。我知道这些是混合数据类型,但是即使尝试使用low_memory = false或设置类型,它仍然会失败?
答案 0 :(得分:0)
您的问题源于以下事实:大熊猫将您的某些单元格内容导入为字符串,而其他导入为数字。
您的字典仅匹配1
和2
的数字,而不匹配'1'
和'2'
的字符串:
line_codes = {1:'brand name1', 2:'brand name2', 'AD':'brand name3', 'MN':'brand name4'}
print(line_codes)
您可以将键的“字符串”版本添加到字典中,如下所示:
line_codes.update({str(k):v for k,v in list(line_codes.items())})
print(line_codes)
输出:
# before
{1: 'brand name1', 2: 'brand name2', 'MN': 'brand name4', 'AD': 'brand name3'}
# after
{ 1: 'brand name1', 2: 'brand name2', 'AD': 'brand name3', 'MN': 'brand name4',
'1': 'brand name1', '2': 'brand name2'}
这样,两个可能的键都存在,并且您的数据框应正确替换键。