Python遍历pandas DataFrame列转整数时行值被覆盖如何解决
问题原因
你的循环写法逻辑错误:
df['value'] = xxx是对整列赋值,每次循环都会把这一列所有值替换成当前行的计算结果,循环结束后整列只会保留最后一次计算的值,所以所有行结果都相同。- pandas做列转换尽量不要用逐行for循环,性能很差,有原生的高效实现方式。
正确实现方案
推荐方案:整列向量化转换(性能最优)
先执行print(df['c_code'].dtype)确认列类型,分两种情况处理:
- 如果
c_code列存储的是0x开头的十六进制字符串,直接用apply整列转换即可:
df['value'] = df['c_code'].apply(lambda x: int(x, 0))
- 如果你是按照给出的示例代码创建DataFrame(十六进制值未加引号),Python初始化时就已经把
0x开头的字面量解析为十进制整数,c_code本身就是整数列,直接赋值即可:
df['value'] = df['c_code']
运行后即可得到你期望的结果:
原循环写法修正(不推荐,仅作参考)
如果一定要用循环实现,不能直接给整列赋值,需要逐单元格赋值:
# 先初始化空列 df['value'] = 0 for i in range(len(df)): df.loc[i, 'value'] = int(df['c_code'].iloc[i], 0)
注意:该写法在数据量较大时运行效率远低于向量化方案,非必要不使用。
内容的提问来源于stack exchange,提问作者SMar3552
相关产品推荐
相关产品推荐

