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

如何提取Pandas DataFrame列中括号内的字符串至新列?

解决方案:提取入住人与预订人信息

看起来你已经搞定了头衔提取的部分,不过先帮你修正下之前的头衔提取代码——那个for循环是多余的,直接一行就能搞定:

import pandas as pd
from pandas import Series, DataFrame

# 你的原始数据
names = ['Banana, Andrew Something (Maria Banana)', 'Willis, Mr. Bruce (Demi Moore)', 'Crews, Master Terry']
room = [100, 330, 212]
hotel_loon = {'Name' : Series(names), 'Room' : Series(room)}
hotel_loon_df = DataFrame(hotel_loon)

# 修正后的头衔提取(去掉无用循环)
hotel_loon_df['Title'] = hotel_loon_df['Name'].str.extract(r'([A-Za-z]+)\.', expand=False)

接下来解决提取括号内入住人的问题,我们可以用正则表达式+填充空值的组合,一步到位处理两种场景(有括号/无括号):

步骤1:提取括号内的入住人姓名

用str.extract匹配括号中的内容,正则表达式r'\((.*?)\)'会精准捕获括号里的所有字符(非贪婪模式,避免意外匹配多个括号):

# 提取入住人(括号内的内容)
hotel_loon_df['Guest'] = hotel_loon_df['Name'].str.extract(r'\((.*?)\)', expand=False)

步骤2:处理无括号的情况(预订人=入住人)

当没有括号时,Guest列会是NaN,这时候我们需要先提取纯预订人姓名(去掉括号及里面的内容),再用这个值填充空的Guest列:

# 提取纯预订人姓名(去掉括号及括号内的内容)
hotel_loon_df['Booker'] = hotel_loon_df['Name'].str.replace(r'\s*\(.*\)', '', regex=True)

# 填充空值:如果没有入住人,就用预订人姓名填充
hotel_loon_df['Guest'] = hotel_loon_df['Guest'].fillna(hotel_loon_df['Booker'])

最终结果

运行完上面的代码后,你的DataFrame会变成这样:

NameRoomTitleBookerGuest
Banana, Andrew Something (Maria Banana)100NaNBanana, Andrew SomethingMaria Banana
Willis, Mr. Bruce (Demi Moore)330MrWillis, Mr. BruceDemi Moore
Crews, Master Terry212MasterCrews, Master TerryCrews, Master Terry

关键正则解释

  • r'\((.*?)\)':匹配(开头、)结尾的内容,.*?是非贪婪匹配,确保只捕获一对括号内的内容
  • r'\s*\(.*\)':匹配括号及括号前的任意空格,用空字符串替换,得到纯预订人姓名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:02:31