You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas为person_id列拼接字符串报错ValueError的解决方法

嘿,这个问题我遇见过!咱们先搞清楚报错的根源,再给你几个高效的解决方案。

首先,你的代码里有两个核心问题导致了这个错误:

  • 你用了row_data['person_id'].tostring(),这个方法不是把数值转成十进制字符串,而是把数值的二进制字节转成字符串(比如数值1调用后会得到类似b'\x01'的结果),拼接后变成u_b'\x01'这种不符合预期的格式,Pandas试图把这个奇怪的字符串存回原来的数值类型列时,自然就抛出了类型转换错误。
  • 另外set_value方法早就被Pandas弃用了,现在推荐用at或者iat来进行单元素赋值操作。

接下来给你两种可行的解决方案,优先推荐第一种,因为Pandas的矢量化操作比循环高效太多:

方案1:矢量化字符串拼接(最推荐)

直接对整列进行操作,先把person_id转成字符串类型,再拼接前缀:

dataset['person_id'] = 'u_' + dataset['person_id'].astype(str)

这个方法一行代码搞定,而且比循环快几十甚至上百倍(数据量越大差距越明显)。执行后person_id列会自动转为字符串类型,完美得到u_1、u_2…的格式。

方案2:循环赋值(仅作参考,不推荐)

如果你一定要用循环的方式(比如有额外的行级逻辑),可以改成下面的代码:

# 先把列转成字符串类型,避免赋值时的类型冲突
dataset['person_id'] = dataset['person_id'].astype(str)
for index_data, row_data in dataset.iterrows():
    dataset.at[index_data, 'person_id'] = 'u_' + row_data['person_id']

这里我们先统一把列转为字符串类型,然后用at来安全赋值,同时直接使用已转成字符串的row_data['person_id'],而不是错误的tostring()方法。

这样修改后,就能完全实现你想要的预期效果啦!

内容的提问来源于stack exchange,提问作者Reub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:19:29