gpt4 book ai didi

python - 无法比较类型 'ndarray(dtype=int64)' 和 'int64'

转载 作者:太空宇宙 更新时间:2023-11-03 15:41:44 24 4
gpt4 key购买 nike

我的数据框中有一列包含条形码,并创建了一个字典来将条形码映射到项目 ID。

我正在创建一个新专栏:

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

然后用字典映射item id

df = df.replace({'item_id':map_barcode})

这里希望获取列中的item id

(回到字典示例:)

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))

但得到了同样的错误。

我在这里遗漏了什么吗?

最佳答案

替换例子

首先,我无法重现您的错误。这很好用:

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'])

另见:

关于python - 无法比较类型 'ndarray(dtype=int64)' 和 'int64',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52225770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com