我的数据中有一列有条形码,并创建了一个字典来将条形码映射到项ids。
我正在创建一个新的专栏:
df['item_id'] = df['bar_code']字典(第二个数据集- imdb -)
keys = (int(i) for i in imdb['bar_code'])
values = (int(i) for i in imdb['item_id'])
map_barcode = dict(zip(keys, values))map_barcode (前5例)
{0: 1000159,9000000017515: 11,7792690324216: 16,7792690324209: 20,70942503334: 33}
,然后用dict映射项id。
df = df.replace({'item_id':map_barcode})在这里,我希望获得列中的项目ids。
(回到dict示例:)
df['item_id'][0] = 1000159
df['item_id'][1] = 11
df['item_id'][2] = 16
df['item_id'][3] = 20
df['item_id'][4] = 33但是最终得到了这个错误:
Cannot compare types 'ndarray(dtype=int64)' and 'int64' 我试图将字典的类型更改为np.int64
keys = (np.int64(i) for i in imdb['bar_code'])
values = (np.int64(i) for i in imdb['item_id'])
map_barcode = dict(zip(keys, values))但也有同样的错误。
这里有我遗漏的东西吗?
发布于 2018-09-07 15:59:52
replace实例
首先,我不能重复你的错误。这样做很好:
map_dict = {0: 1000159, 9000000017515: 11, 7792690324216: 16, 7792690324209: 20, 70942503334: 33}
df = pd.DataFrame({'item_id': [0, 7792690324216, 70942503334, 9000000017515, -1, 7792690324209]})
df = df.replace({'item_id': map_dict})结果:
item_id
0 1000159
1 16
2 33
3 11
4 -1
5 20使用map + fillna代替
其次,在生成器表达式中手动迭代Pandas系列是相对昂贵的。此外,replace在通过字典进行映射时效率很低。
事实上,创建一本词典甚至都是不必要的。对于这些任务,有一些优化的基于系列的方法:
map_series = imdb[['bar_code', 'item_id']].astype(int).set_index('bar_code')['item_id']
df['item_id'] = df['item_id'].map(map_series).fillna(df['item_id'])另请参阅:
https://stackoverflow.com/questions/52225770
复制相似问题