如何在Python中根据字符串长度将DataFrame列值置为空
问题描述
需要实现:当DataFrame中某列的字符串长度小于3时,将对应值替换为空字符串。示例如下:
| Words | Len | Expected OutPut |
|---|---|---|
| TN27E8375 | 9 | TN27E8375 |
| - | 1 | |
| DP - 2073698 | 12 | DP - 2073698 |
| 0 | ||
| New | 3 | New |
| *5 | 2 |
解决方案
可以用Pandas的字符串方法结合条件判断实现,以下是几种常用方法:
方法1:使用str.len() + mask()
mask()会将满足条件的值替换为指定内容,这里把长度<3的字符串替换为空:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'Words': ['TN27E8375', '-', 'DP - 2073698', '', 'New', '*5'], 'Len': [9, 1, 12, 0, 3, 2] }) # 执行替换 df['Expected OutPut'] = df['Words'].mask(df['Words'].str.len() < 3, '')
方法2:使用np.where()
通过numpy的where函数做条件分支替换,逻辑更直观:
import pandas as pd import numpy as np df['Expected OutPut'] = np.where(df['Words'].str.len() >= 3, df['Words'], '')
处理NaN值场景
如果原数据存在NaN(而非空字符串),需先填充空值再判断,避免报错:
# 先把NaN转为空字符串,再执行替换 df['Expected OutPut'] = df['Words'].fillna('').mask(df['Words'].fillna('').str.len() < 3, '')
说明
str.len()会计算每个字符串的长度,空字符串长度为0,会被判定为需要替换- 条件
str.len() < 3匹配长度为0、1、2的字符串,统一替换为空 - 长度等于3的字符串(如示例中的"New")会被保留
内容的提问来源于stack exchange,提问作者Ravindra pol
相关产品推荐
相关产品推荐

