将整数字典映射到Pandas Dataframe

时间:2018-04-06 13:02:40

标签: python pandas

我正在尝试使用预定义的整数到整数python字典,以便将pandas数据帧中的相应行映射到新行而不会成功。

我有以下数据框:

data=np.array([
    ['Item 1',7365301,"Cool item."]
])

items = pd.DataFrame(data = data, columns = ['name','id','description'])

我有一个python字典,它从int-> int映射如下:

item_map = {7365301: 10}

我正在尝试使用Pandas map将字典中的值映射到新列:

items['id2'] = items['id'].map(inverse_item_map)

最终得到以下内容:

    name    id  description id2
0   Item 1  7365301 Cool item.  NaN

或者喜欢:

items['id2'] = items['id'].map(inverse_item_map).astype(int)

抛出ValueError:

Cannot convert non-finite values (NA or inf) to integer

这里发生了什么?我在这里做错了吗?为什么这个操作不成功?

1 个答案:

答案 0 :(得分:1)

问题是,您是使用np.array传递值,它不支持多种类型,这意味着如果有str,它也会将所有数字转换为str。

检查数据

data=np.array([
    ['Item 1',7365301,"Cool item."]
])
data
                            #str
Out[16]: array([['Item 1', '7365301', 'Cool item.']], dtype='<U10')

这就是你成为str类型的原因

items.applymap(type)
Out[14]: 
            name             id    description
0  <class 'str'>  <class 'str'>  <class 'str'>

我建议将item_map = {7365301: 10}更改为item_map = {'7365301': 10}

然后

items['id2'] = items['id'].map(inverse_item_map).astype(int)