如何对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
相关产品推荐
相关产品推荐

