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

Pandas DataFrame中score1、score2列整数替换失效问题求助

问题原因分析

你遇到的问题核心是对pandas replace() 方法的工作逻辑理解有误:当你传入两个列表作为to_replace和value参数时,它不是按位置一一对应替换元素,而是按值建立映射关系。

比如你的代码中:

df['score1'].replace([33, 48, 25, 33], [1,2,3,4], inplace=True)

pandas会把to_replace列表中的每个值,映射到value列表对应位置的值,但如果to_replace里有重复值(比如两次出现的33),后面的映射会覆盖前面的。最终实际生效的映射是:

  • 33 → 4(因为最后一次出现的33对应value里的4)
  • 48 → 2
  • 25 → 3
    这就导致所有33都被替换成4,和你预期的“第一个33换1,第四个33换4”完全不符,看起来像是出现了“随机数值”。
解决方案

根据你的需求,分两种场景给出解决方法:

场景1:按值统一替换(所有相同值换成同一个新值)

如果你想把所有33替换成1、所有48替换成2、所有25替换成3,应该用字典映射的方式,这是replace()处理值替换的标准用法:

# 替换score1:所有33→1,48→2,25→3
df['score1'].replace({33: 1, 48: 2, 25: 3}, inplace=True)
# 替换score2:所有33→1,48→3(注意你原代码里的重复值会被覆盖,这里按你可能的真实需求调整)
df['score2'].replace({33: 1, 48: 3}, inplace=True)

场景2:按位置逐个替换(指定位置的元素换成对应新值)

如果你确实想按列中元素的位置,把第1个元素换1、第2个换2、第3个换3、第4个换4,那就不能用replace(),而是直接通过索引赋值:

# 按位置替换score1的所有元素
df['score1'].iloc[:] = [1, 2, 3, 4]
# 按位置替换score2的所有元素
df['score2'].iloc[:] = [1, 3, 4, 5]

或者用更明确的行索引赋值(因为你的DataFrame行索引是a,b,d,e):

df.loc[['a', 'b', 'd', 'e'], 'score1'] = [1, 2, 3, 4]
df.loc[['a', 'b', 'd', 'e'], 'score2'] = [1, 3, 4, 5]
修改后的完整代码示例

如果你需要按位置替换的效果,完整代码如下:

import pandas as pd
raw_data = {
    "city" : ["new york", "Sydney", "miami", "Rome"],
    "rank": ["1st", "2nd", "2", "3"],
    "score1": [33, 48, 25, 33],
    "score2": [33, 48,33, 48]
}
df = pd.DataFrame(
    raw_data, 
    index=pd.Index(['a', 'b', 'd', 'e'], name='letter'), 
    columns=pd.Index(['city', 'rank', 'score1', 'score2'], name='attributes')
)

# 按位置替换
df['score1'].iloc[:] = [1, 2, 3, 4]
df['score2'].iloc[:] = [1, 3, 4, 5]

print(df)

执行后输出的结果就是你预期的按位置替换后的DataFrame:

attributes       city rank  score1  score2
letter                                    
a            new york  1st       1       1
b              Sydney  2nd       2       3
d               miami    2       3       4
e                Rome    3       4       5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:06:38