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

如何基于指定公司法律形式列表拆分DataFrame列字符串?

基于指定法律形式列表拆分DataFrame列

解决思路

核心是利用正则表达式结合优先匹配长法律形式的策略,确保准确拆分公司名称、法律形式和附加信息,避免短形式误匹配长形式或嵌入其他单词的情况。

具体实现步骤

  1. 预处理法律形式列表:按字符串长度倒序排序,优先匹配多词或较长的法律形式(比如先匹配gmbh & co kg而非gmbh)。
  2. 构建安全正则模式:转义法律形式中的特殊字符(如&),用|连接所有形式,通过正则分组提取三部分内容。
  3. 提取并整理数据:用pandas的str.extract拆分列,处理空值得到最终结果。

代码示例

import pandas as pd
import re

# 定义全球公司法律形式列表
legal_forms = ['gmbh', 'ltd', 'inc', 'srl', 'spa', 'co', 'sa', 'ag', 'kg', 'ab', 'spol', 'sasu', 'sas', 'pvt', 'sarl', 'gmbh & co kg', 'llc', 'ilc', 'corp', 'ltda', 'coltd', 'se', 'as', 'sp zoo', 'plc', 'pvtltd', 'og', 'gen']

# 按长度倒序排序,优先匹配长法律形式
sorted_legal_forms = sorted(legal_forms, key=lambda x: len(x), reverse=True)

# 构建正则模式:转义特殊字符,确保法律形式是独立部分
pattern = r'^\s*(.*?)\s+(' + '|'.join(re.escape(f) for f in sorted_legal_forms) + r')\s*(.*)$'

# 示例数据
data = {'Company': ['XYZ ltd electronics', 'ABC ABC inc iron', 'AB XY Z inc', 'CD EF GHI JK llc incident']}
df = pd.DataFrame(data)

# 提取三部分内容
df[['Company', 'Legal form', 'Addition']] = df['Company'].str.extract(pattern, expand=True)

# 处理附加信息列的空值,转为空字符串
df['Addition'] = df['Addition'].fillna('')

print(df)

代码说明

  • 排序逻辑:长法律形式优先匹配,避免短形式截断长形式(比如gmbh & co kg不会被拆成gmbh加后续内容)。
  • 正则安全处理:re.escape处理特殊字符(如&),防止正则语法错误。
  • 非贪婪匹配:.*?确保只匹配法律形式之前的公司名称,不会过度匹配。
  • 空值处理:当法律形式在字符串末尾时,附加信息列自动填充为空字符串,符合示例要求。

输出结果

CompanyLegal formAddition
XYZltdelectronics
ABC ABCinciron
AB XY Zinc
CD EF GHI JKllcincident

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:54:18