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

DataFrame.applymap使用后列消失问题及指定列类型转换需求

解决DataFrame.applymap处理部分列后列消失的问题

我明白你遇到的困扰了——尝试用applymap转换DataFrame部分列时,要么发现原数据没变化,要么不小心弄丢了未处理的列(比如你的e列)。这其实是对Pandas视图与副本的操作逻辑理解不到位导致的,下面给你拆解具体解决方案:

问题根源

当你执行frame[['b','d']].applymap(int)时,这段代码只会生成一个临时的新DataFrame(仅包含处理后的b、d列),但它并没有修改原始的frame对象。如果错误地把这个临时结果赋值给frame(比如frame = frame[['b','d']].applymap(int)),就会直接覆盖原DataFrame,导致e列丢失。

正确解决方案

要实现「只转换b、d列为整数,保留e列不变」的需求,你需要把处理后的结果精准赋值回原DataFrame的对应列,而非覆盖整个DataFrame。这里有两种高效的方法:

方法1:用applymap逐元素转换

applymap适合自定义逐元素操作,用来转整数完全可行:

# 将处理后的b、d列赋值回原DataFrame的对应列
frame[['b', 'd']] = frame[['b', 'd']].applymap(int)

方法2:用astype列级转换(更高效)

如果只是简单的数值类型转换,astype比applymap效率更高,因为它是列级批量操作:

frame[['b', 'd']] = frame[['b', 'd']].astype(int)

完整示例演示

import pandas as pd
import numpy as np

# 创建测试数据框
frame = pd.DataFrame(np.random.randn(4, 3)*1000000, columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon'])
print("原始数据:")
print(frame)

# 执行转换操作(二选一即可)
frame[['b', 'd']] = frame[['b', 'd']].applymap(int)
# frame[['b', 'd']] = frame[['b', 'd']].astype(int)

print("\n处理后的数据:")
print(frame)

执行后你会看到,b、d列已经转为整数类型,e列则完全保留了原有的数值与类型,不会消失。

关键注意点

  • 绝对不要直接将子集处理结果赋值给整个DataFrame变量(比如frame = frame[['b','d']].xxx),这会直接丢弃未被选中的列。
  • 针对列的修改,一定要定位到原DataFrame的对应列进行赋值,才能保留其他列的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:27:36