如何筛选含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会被设为NaNdropna(subset=['NAME']):过滤掉NAME为NaN的行,即不含5位数字的行reset_index(drop=True):重置结果索引,避免出现断号
内容的提问来源于stack exchange,提问作者Carola
相关产品推荐
相关产品推荐

