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

如何对Pandas DataFrame除首列外的所有列应用applymap?

Pandas 原地转换指定列元素为ASCII值的优化方案

问题背景

现有如下结构的Pandas DataFrame df:

0       1   2   3   4   5
0   first   M   A   F   I   L
1   second  M   A   F   I   L
2   third   M   S   F   I   I
3   fourth  M   S   F   I   L
4   fifth   M   L   F   F   I

需求:将除第一列外的所有列的每个元素转换为对应的ASCII整数(如"M"转为77,"A"转为65等)。

当前实现方式:

new_df = df.loc[:, 1:].applymap(ord)
new_df.insert(0, 0, df[0])

询问:是否存在更优的实现方式?比如无需创建新DataFrame,直接原地对指定列子集应用applymap的方法?

优化实现方案

当然可以直接原地修改,不需要创建新的DataFrame。你可以直接定位到需要修改的列(除第一列外的所有列),然后用applymap(ord)直接赋值回去,代码如下:

df.loc[:, 1:] = df.loc[:, 1:].applymap(ord)

这样就直接在原DataFrame上完成了转换,不需要额外创建新对象再合并,代码更简洁高效,同时避免了内存中生成额外的DataFrame副本。

如果你的列是按列名而非位置索引的,也可以用列名列表指定目标列,比如假设第一列名为'name',其他列是['col1', 'col2', 'col3', 'col4'],可以写成:

df[['col1', 'col2', 'col3', 'col4']] = df[['col1', 'col2', 'col3', 'col4']].applymap(ord)

补充说明

  • 原地修改的好处是节省内存,尤其是当DataFrame数据量较大时,避免了复制整个数据集的开销。
  • 如果需要保留原始DataFrame,可以先创建副本再修改,比如df_copy = df.copy(),再对df_copy执行上述操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:50:28