Python:拆分AddrCity中州信息至AddrState并清理冗余内容
解决AddrCity列州信息拆分与清理问题
数据录入时部分州信息混入AddrCity单元格,存在无规律的城市+州组合,还有需要移除的, 符号,需求是将州信息迁移到AddrState列,并清理AddrCity列。现有数据集:
AddrLines AddrCity AddrState 0 123 street Titusville FL NaN 1 456 road Viera FL NaN 2 789 place Melbourne, Fl NaN 3 001 ave Wright VA
你当前的代码仅完成了AddrState的赋值,但未清理AddrCity列的冗余内容,且写法重复繁琐。以下是能同时完成州信息迁移和AddrCity清理的高效方案:
正则表达式批量处理
利用pandas的字符串正则方法,一步完成提取州信息、填充AddrState、清理AddrCity三个操作:
import pandas as pd # 构造示例DataFrame(已有数据可跳过此步) data = { 'AddrLines': ['123 street', '456 road', '789 place', '001 ave'], 'AddrCity': ['Titusville FL', 'Viera FL', 'Melbourne, Fl', 'Wright'], 'AddrState': [pd.NA, pd.NA, pd.NA, 'VA'] } df = pd.DataFrame(data) # 正则模式:匹配末尾的州缩写(支持带逗号/不带逗号的格式) state_pattern = r'(?:,?\s)([A-Za-z]{2})$' # 提取州信息并填充AddrState(保留原有有效值) df['AddrState'] = df['AddrState'].fillna( df['AddrCity'].str.extract(state_pattern, expand=False).str.upper() ) # 清理AddrCity:移除州信息及残留的逗号、空格 df['AddrCity'] = df['AddrCity'].str.replace(state_pattern, '', regex=True).str.strip(', ') # 查看处理结果 print(df)
运行后输出结果:
AddrLines AddrCity AddrState 0 123 street Titusville FL 1 456 road Viera FL 2 789 place Melbourne FL 3 001 ave Wright VA
代码说明
state_pattern正则能匹配两种格式的州信息:城市 FL或城市, Fl,兼容大小写和逗号分隔的情况fillna确保AddrState列原有有效值(如第3行的VA)不会被覆盖str.upper()统一州缩写为大写格式,保证数据一致性str.replace移除匹配到的州部分,strip(', ')清理可能残留的逗号和空格
这个方案无需逐个判断州的格式,扩展性强,能适配更多州缩写的情况。
内容的提问来源于stack exchange,提问作者feelsgood
相关产品推荐
相关产品推荐

