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

Pandas DataFrame列字符串替换为0时代码无效果如何调整参数?

问题解决方法

问题1:replace操作未生效的原因

pandas的replace方法默认不会修改原对象,只会返回修改后的新Series,你没有接收返回值也没有开启原地修改参数,所以原DataFrame没有发生变化。

问题2:当前正则无法匹配到要替换的内容

你当前的正则^$只能匹配空字符串,但你代码里生成的new列中非数字值对应的是提取到的a、b、sc/a等非空字符串,根本匹配不到,就算replace生效也达不到你的预期。

调整方案

如果你要实现「new列中只有纯数字值保留,其余全部替换为0」的预期,有两种可选方式:

方式1:修改你的replace参数

把正则改成匹配所有非数字的字符串,同时赋值回原列:

# 替换原来的replace行,匹配所有非纯数字的内容替换为0
df['new'] = df['new'].replace(to_replace=r'^\D+$', value=0, regex=True)

方式2:简化整体逻辑(更推荐)

不需要先提取前缀再替换,直接一步判断即可,代码更简洁不易出错:

import pandas as pd
import numpy as np

l2=['a. 12','b. 75','23', 'sc/a 34', '85', 'a 32', 'b 345']
df = pd.DataFrame({'col1': l2})
# 直接判断是否为纯数字,是就保留原值,否则设为0
df['new'] = np.where(df['col1'].str.isnumeric(), df['col1'], 0)
print(df['new'])

执行后输出完全符合预期:

0     0
1     0
2    23
3     0
4    85
5     0
6     0
Name: new, dtype: object

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:54:02