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

Python中统计含括号行并移除括号及后续文本的问题解决

问题解决方案

嘿,我来帮你搞定这两个Pandas操作的小问题,你的思路是对的,只是在Series的字符串处理上踩了两个常见的小坑~

1. 统计包含"("的行数

你之前用energy['Country'].value_counts()[['(']].sum出错,是因为value_counts()返回的是每个唯一国家名称的出现次数,它的索引是国家名称,而不是单个字符,所以你用['(']去索引肯定找不到匹配项啦。

正确的做法是用Pandas的字符串方法str.contains()来检测每行是否包含"(",然后用sum()统计符合条件的行数(因为布尔值True会被视为1,False视为0):

# 注意括号是正则特殊字符,需要用\转义
count_with_parentheses = energy['Country'].str.contains('\(').sum()
print(f"包含'('的行数:{count_with_parentheses}")

如果你的数据里没有特殊的正则场景,也可以加上regex=False来关闭正则匹配,这样就不用转义了:

count_with_parentheses = energy['Country'].str.contains('(', regex=False).sum()

2. 移除"("及其后的文本

你遇到AttributeError: 'Series' object has no attribute 'split',是因为Pandas的Series对象本身没有split()方法,要对Series里的每个字符串元素应用split操作,必须通过.str属性来调用字符串方法。

正确的代码应该是:

# 按"("分割,只分割一次,取分割后的第一个部分,再去掉首尾可能的空格
energy['Country'] = energy['Country'].str.split('(', 1, regex=False).str[0].str.strip()

解释一下各部分的作用:

  • .str.split('(', 1, regex=False):对每个国家名称字符串按"("分割,只分割一次,返回一个包含列表的Series(比如"Micronesia (Federated States of)"会变成["Micronesia ", "Federated States of)"])
  • .str[0]:取每个列表的第一个元素(即"("前面的部分)
  • .str.strip():去掉字符串首尾的空格,让结果更整洁(比如把"Micronesia "变成"Micronesia")

这样处理后,你的示例数据就会完美变成期望的结果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:07:38