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

如何筛选含5位数字的DataFrame行并替换NAME列值?

Pandas处理:提取含5位数字的行并替换NAME列值

原始数据

import pandas as pd

data = {
    'NAME': ['Total', 'Macael-04062', 'Spain', 'Badalona-08911', 'Vallecas-28031'],
    'NUM_OWNERS': [23900137, 366607, 4283950, 5829, 5691],
    'NUM_DOCS': [21028886, 324413, 3642683, 6250, 5215],
    'NUM_RESIDENTS': [44571130.0, 727945.0, 8464411.0, 15480.0, 10358.0]
}
df = pd.DataFrame(data)

原始DataFrame输出:

NAME  NUM_OWNERS  NUM_DOCS  NUM_RESIDENTS
0           Total    23900137  21028886      44571130.0
1     Macael-04062      366607    324413        727945.0
2           Spain     4283950   3642683       8464411.0
3   Badalona-08911        5829      6250         15480.0
4   Vallecas-28031        5691      5215         10358.0

需求

保留NAME列中包含5位数字的行,并将NAME列的值替换为该5位数字。

解决方案

用正则提取目标数字并过滤无效行:

# 提取NAME中的5位数字,无匹配则设为NaN
df['NAME'] = df['NAME'].str.extract(r'(\d{5})')
# 删除NAME为NaN的行,重置索引
df = df.dropna(subset=['NAME']).reset_index(drop=True)

处理后结果

NAME  NUM_OWNERS  NUM_DOCS  NUM_RESIDENTS
0  04062      366607    324413        727945.0
1  08911        5829      6250         15480.0
2  28031        5691      5215         10358.0

代码说明

  • str.extract(r'(\d{5})'):通过正则\d{5}匹配连续5位数字,括号捕获匹配内容并替换原NAME列;无匹配的行NAME会被设为NaN
  • dropna(subset=['NAME']):过滤掉NAME为NaN的行,即不含5位数字的行
  • reset_index(drop=True):重置结果索引,避免出现断号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:54:22