Python中匹配DataFrame指定列并批量重命名的实现方案
需求说明
给定列名列表:
col_list = ['Subsidiary','State of Jurisdiction of Incorporation','Jurisdiction ofIncorporationor Organization','Jurisdiction of Incorporation or Organization', 'Subsidiaries','State or Other Jurisdiction of Organization','Jurisdiction ofIncorporation orOrganization', 'Company Name', 'State of Incorporation', 'Legal Name','Entity','Name of Company/Jurisdiction of Incorporation or Formation','Place of Formation','Name of Company']
需要实现:
- 将DataFrame中匹配以下列名的字段统一重命名为
entity_name:
Subsidiary、Subsidiaries、Company Name、Legal Name、Entity、Name of Company/Jurisdiction of Incorporation or Formation、Name of Company - 将匹配以下类别的列名统一重命名为
entity_place:
包含Jurisdiction、Place of Formation、State of Incorporation的列
示例展示
示例1
原始DataFrame(df1):
| Subsidiary | Jurisdiction |
|---|---|
| A1 | X1 |
| A2 | X2 |
| A3 | X3 |
处理后结果:
| entity_name | entity_place |
|---|---|
| A1 | X1 |
| A2 | X2 |
| A3 | X3 |
示例2
原始DataFrame(df2):
| Legal Name | Place of Formation |
|---|---|
| A1 | X1 |
| A2 | X2 |
| A3 | X3 |
处理后结果:
| entity_name | entity_place |
|---|---|
| A1 | X1 |
| A2 | X2 |
| A3 | X3 |
实现方法
以下提供两种Python实现方案,基于pandas库完成列名重命名:
方案1:正则匹配动态判断
适合列名存在变体、需要模糊匹配的场景,通过自定义函数结合正则表达式实现:
import pandas as pd import re def rename_columns(col_name): # 匹配entity_name的精确正则规则 entity_name_patterns = [ r'^Subsidiary$', r'^Subsidiaries$', r'^Company Name$', r'^Legal Name$', r'^Entity$', r'^Name of Company/Jurisdiction of Incorporation or Formation$', r'^Name of Company$' ] if any(re.match(pattern, col_name) for pattern in entity_name_patterns): return 'entity_name' # 匹配entity_place的包含规则 entity_place_keywords = ['Jurisdiction', 'Place of Formation', 'State of Incorporation'] if any(keyword in col_name for keyword in entity_place_keywords): return 'entity_place' # 未匹配到规则的列保留原名 return col_name # 测试示例1 df1 = pd.DataFrame({ 'Subsidiary': ['A1', 'A2', 'A3'], 'Jurisdiction': ['X1', 'X2', 'X3'] }) df1_renamed = df1.rename(columns=rename_columns) # 测试示例2 df2 = pd.DataFrame({ 'Legal Name': ['A1', 'A2', 'A3'], 'Place of Formation': ['X1', 'X2', 'X3'] }) df2_renamed = df2.rename(columns=rename_columns)
方案2:预构建重名字典
适合列名固定已知的场景,提前构建映射字典,执行效率更高:
import pandas as pd # 给定的列名列表 col_list = ['Subsidiary','State of Jurisdiction of Incorporation','Jurisdiction ofIncorporationor Organization','Jurisdiction of Incorporation or Organization', 'Subsidiaries','State or Other Jurisdiction of Organization','Jurisdiction ofIncorporation orOrganization', 'Company Name', 'State of Incorporation', 'Legal Name','Entity','Name of Company/Jurisdiction of Incorporation or Formation','Place of Formation','Name of Company'] # 构建重名字典 rename_dict = {} # 添加entity_name的映射 entity_name_cols = ['Subsidiary', 'Subsidiaries', 'Company Name', 'Legal Name', 'Entity', 'Name of Company/Jurisdiction of Incorporation or Formation', 'Name of Company'] for col in entity_name_cols: rename_dict[col] = 'entity_name' # 添加entity_place的映射 entity_place_cols = [col for col in col_list if 'Jurisdiction' in col or 'Place of Formation' in col or 'State of Incorporation' in col] for col in entity_place_cols: rename_dict[col] = 'entity_place' # 执行重命名 df_renamed = df.rename(columns=rename_dict)
内容的提问来源于stack exchange,提问作者emiley mille
相关产品推荐
相关产品推荐

