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

如何移除Pandas DataFrame列中括号内内容及末尾数字?

解决方案

1. 直接可用的清理代码

用Pandas的str.replace结合正则表达式,一次就能搞定两种格式问题:

# 一步移除括号内容和末尾数字
Energy['Country'] = Energy['Country'].str.replace(r'\s*\(.*?\)|\d+$', '', regex=True).str.strip()

正则说明:

  • \s*\(.*?\):匹配括号前的空格(可选)+ 括号及内部所有内容(非贪婪模式,避免多括号匹配错误)
  • |\d+$:用|连接第二种匹配规则,匹配末尾的一个或多个数字
  • 最后加.str.strip()是为了清理替换后可能残留的多余空格

如果想分步处理更清晰,也可以拆成两步:

# 先清括号内容,再清末尾数字
Energy['Country'] = Energy['Country'].str.replace(r'\s*\(.*?\)', '', regex=True)
Energy['Country'] = Energy['Country'].str.replace(r'\d+$', '', regex=True).str.strip()

2. 排查操作无效的常见坑点

  • 必须开正则模式:Pandas的str.replace默认regex=False,会把正则表达式当成普通字符串匹配,一定要加regex=True参数
  • 检查列名和赋值:确认列名是Country(注意大小写),且清理后的值要赋值回原列,不然等于白操作
  • 处理空值:如果列里有空值,先填充空字符串再处理:Energy['Country'] = Energy['Country'].fillna('')
  • 验证正则有效性:拿样本字符串单独测试,确认正则逻辑没问题:
import re
test_cases = ['Iran (Islamic Republic of)', 'Netherlands12', 'France (Metropolitan)3']
for s in test_cases:
    print(f"原内容: {s} → 清理后: {re.sub(r'\s*\(.*?\)|\d+$', '', s).strip()}")

3. 完整测试示例

import pandas as pd

# 模拟你的DataFrame
Energy = pd.DataFrame(
    {'Country': ['Iran (Islamic Republic of)', 'Netherlands12', 'Germany (Federal Republic)45', 'Canada', '']},
    dtype='string'
)

# 执行清理
Energy['Country'] = Energy['Country'].str.replace(r'\s*\(.*?\)|\d+$', '', regex=True).str.strip()

print(Energy['Country'])

输出结果:

0       Iran
1    Netherlands
2       Germany
3        Canada
4              
Name: Country, dtype: string

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:42:55