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

如何在Pandas中移除含小写字母的字符串列值(含NaN处理)

解决Pandas字符串列移除含小写字母内容的问题

需求:在Pandas的字符串列中移除包含小写字母的字符串,列中可能存在NaN或单行包含多个字符串。

原DataFrame

Column1Column2Column3
NaNNaNNaN
BCDE8ENGUGUETNJNNaNNaN
vk4JGFIEh5NaNNaN
t7chJGWYEjBCSTACKBCTENSORFLOW
5hNIE7EEPOVERFLOWNaN

尝试的错误代码

df['Column1'].fillna('nan',inplace=True)
df['Column2'].fillna('nan',inplace=True)
df['Column3'].fillna('nan',inplace=True)

lowerletterpattern = r'[a-z]*'

mask1 = df['Column1'].str.contains(lowerletterpattern)
df.loc[mask1,'Column1'] = np.nan

mask2 = df['Column2'].str.contains(lowerletterpattern)
df.loc[mask2,'Column2'] = np.nan

mask3 = df['Column3'].str.contains(lowerletterpattern)
df.loc[mask3,'Column3'] = np.nan

运行后所有值均为NaN,不符合预期。

问题分析

  1. 正则表达式r'[a-z]*'匹配0个或多个小写字母,任何字符串(包括全大写/数字的字符串)都会被匹配,因为0个小写字母也满足条件,导致所有行被替换为NaN。
  2. 提前将NaN填充为字符串'nan',该字符串包含小写字母,最终也会被匹配替换回NaN,进一步导致全表空值。

正确解法

无需提前填充NaN,直接匹配至少一个小写字母的字符串,将其替换为NaN即可:

import pandas as pd
import numpy as np

# 构造原DataFrame(已有可跳过此步骤)
data = {
    'Column1': [np.nan, 'BCDE8ENGUGUETNJN', 'vk4JGFIEh5', 't7chJGWYEj', '5hNIE7EEP'],
    'Column2': [np.nan, np.nan, np.nan, 'BCSTACK', 'OVERFLOW'],
    'Column3': [np.nan, np.nan, np.nan, 'BCTENSORFLOW', np.nan]
}
df = pd.DataFrame(data)

# 批量处理所有目标列
for col in df.columns:
    # na=False:NaN值不参与匹配,保持原状态
    mask = df[col].str.contains(r'[a-z]', na=False)
    df.loc[mask, col] = np.nan

最终结果

Column1Column2Column3
NaNNaNNaN
BCDE8ENGUGUETNJNNaNNaN
NaNNaNNaN
NaNBCSTACKBCTENSORFLOW
NaNOVERFLOWNaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:03:18