如何用正则表达式从Pandas列中提取NAICS编码?
解决方案
1. 解决KeyError问题
- 执行
print(df.columns)查看DataFrame的所有列名,确认是否存在'Company'列(注意大小写、空格等细节)。如果列名有误,将代码中的'Company'替换为实际的列名即可。
2. 正确提取NAICS编码
原正则仅提取所有数字,会误匹配名称中的数字,且未处理多组NAICS的情况。以下是精准提取的实现:
完整代码
import pandas as pd import re def extract_naics(text): # 处理空值(NaN) if pd.isna(text): return "" # 匹配所有NAICS字段后的编码内容 naics_groups = re.findall(r'NAICS:\s*([\d, ]+)', text) # 把每组编码内的逗号分隔替换为分号,再合并所有组 return "; ".join([group.replace(", ", "; ") for group in naics_groups]) # 应用到DataFrame(确保列名正确) df['NAICS'] = df['Company'].apply(extract_naics)
正则说明
r'NAICS:\s*([\d, ]+)':
NAICS:\s*匹配"NAICS:"及后面的任意空白字符([\d, ]+)捕获数字、逗号、空格组成的编码字符串,确保拿到每组NAICS的完整内容
效果验证
针对你的示例数据,处理后会得到:
711211 711211 813212 517112; 551112; 711211 524114; 711211; 523999; 531110
内容的提问来源于stack exchange,提问作者Firmino
相关产品推荐
相关产品推荐

