numpy.int64列表元素追加'days'字符串报错解决问询
解决numpy.int64与字符串拼接的TypeError问题
哈哈,这个坑我之前踩过!你遇到的TypeError: ufunc 'add' did not contain a loop with signature matching types dtype,本质原因是numpy.int64类型的数值不能直接和Python字符串做加法操作——numpy的通用函数(ufunc)没有定义这两种类型的相加规则,自然就报错啦。
给你几个亲测好用的解决方案:
方案1:列表推导式里转字符串(最直观)
直接在列表推导里把numpy数值转成字符串,再和"days"拼接,用f-string更简洁:
median_labels = [f"{m} days" for m in medians]
或者用传统的str()转换:
median_labels = [str(m) + " days" for m in medians]
用你提供的测试数组array([ 9, 11, 7, 27, 13, 42, 35, 10, 9, 23, 17]),运行后会得到:
['9 days', '11 days', '7 days', '27 days', '13 days', '42 days', '35 days', '10 days', '9 days', '23 days', '17 days']
方案2:用numpy原生向量操作(适合大数组)
如果你习惯用numpy的批量操作,不想写列表推导,可以先把数组转成字符串类型,再用np.char.add批量拼接:
import numpy as np # 先转字符串,再拼接 median_labels_np = np.char.add(medians.astype(str), " days") # 如果需要转成Python列表,加个tolist() median_labels = median_labels_np.tolist()
这种方法在处理超大数组时效率更高,避免Python循环的开销。
额外小提示
其实你也可以在生成medians的时候就转成Python原生int类型,比如:
medians = closing_deals.groupby(['origin'])['days_to_close'].median().tolist() # 这样medians就是Python int的列表,直接拼接字符串就不会报错了 median_labels = [f"{m} days" for m in medians]
把.values换成.tolist(),直接得到Python列表,后续操作更省心~
内容的提问来源于stack exchange,提问作者Emm
相关产品推荐
相关产品推荐

