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

Python3字符串转数字:指定字符串转1其余转0的代码异常问题

问题分析与修复方案

嘿,我来帮你搞定这个问题!你这段代码执行后全变成0,核心原因是类型不匹配:
你用df.name.replace({"a" : 1, "b" :1}, inplace = True)把"a"和"b"替换成了整数1,但后面的lambda表达式里却在判断x != '1'(字符串类型的'1')。整数1和字符串'1'是完全不同的类型,判断结果永远是True,所以所有值都被转换成0了。

下面给你几种可行的修复方案,从简单到高效:

方案1:统一替换的类型

把replace的目标值改成字符串'1',让后续判断的类型一致:

import pandas as pd
df = pd.DataFrame({'name' : list('abcdefghi')})
# 替换为字符串'1',保持类型统一
df.name.replace({"a" : '1', "b" :'1'}, inplace = True)
df['name'] = df['name'].apply(lambda x:0 if x!='1' else int(x))

方案2:用向量化操作实现(推荐)

Pandas的向量化操作比逐行的apply高效得多,尤其适合大数据量场景。直接用isin判断元素是否在目标列表,再转成整数:

import pandas as pd
df = pd.DataFrame({'name' : list('abcdefghi')})
# isin返回布尔值,astype(int)自动把True转1,False转0
df['name'] = df['name'].isin(['a', 'b']).astype(int)

方案3:用numpy的where函数

如果你习惯用numpy的逻辑判断,也可以这样写:

import pandas as pd
import numpy as np
df = pd.DataFrame({'name' : list('abcdefghi')})
# 满足条件返回1,否则返回0
df['name'] = np.where(df['name'].isin(['a', 'b']), 1, 0)

这几种方案都能实现你想要的效果:将特定字符串(a、b)转为1,其余转为0,其中方案2是最符合Pandas最佳实践的写法哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:38:15