Python中的字典映射

时间:2018-12-19 17:54:22

标签: python-3.x pandas

我有一本字典,其中包含与品牌名称相关联的产品线代码,我正在尝试用字典中的相关品牌名称映射一个名为“ 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)

输出:

Output File

如您所见,由于某种原因,它并没有引入行代码1的所有品牌名称,但引入了部分品牌名称。我知道这些是混合数据类型,但是即使尝试使用low_memory = false或设置类型,它仍然会失败?

1 个答案:

答案 0 :(得分:0)

您的问题源于以下事实:大熊猫将您的某些单元格内容导入为字符串,而其他导入为数字。

您的字典仅匹配12的数字,而不匹配'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'}

这样,两个可能的键都存在,并且您的数据框应正确替换键。