如何高效删除Pandas Multi-Index各级标签中不需要的日文字符
多层索引日文字符清理方案
核心思路是通过正则匹配日文字符的Unicode编码范围,批量替换所有层级索引标签中的日文字符,全程使用Pandas原生操作保证效率。
1. 导入依赖
import pandas as pd import re
2. 定义日文字符匹配正则
根据需要清理的日文类型调整匹配范围,常用覆盖范围如下:
# 匹配范围:全角日文符号、平假名、片假名、常用日文汉字 JP_CHAR_REGEX = re.compile(r'[\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF]')
如果仅需要清理假名不需要清理汉字,删除\u4E00-\u9FFF段即可。
3. 批量处理多层索引
处理列方向MultiIndex
# 构造测试数据(可跳过,直接替换为自己的DataFrame) cols = pd.MultiIndex.from_tuples( [('売上sales', '東京tokyo'), ('売上sales', '大阪osaka'), ('利益profit', '東京tokyo')] ) df = pd.DataFrame([[100, 200, 50], [120, 230, 60]], columns=cols) # 执行清理操作 df.columns = df.columns.map(lambda x: tuple(JP_CHAR_REGEX.sub('', str(s)) for s in x))
处理行方向MultiIndex
如果需要清理行索引,替换处理对象即可:
df.index = df.index.map(lambda x: tuple(JP_CHAR_REGEX.sub('', str(s)) for s in x))
效率说明
- 正则替换基于C语言实现,Pandas的map操作为原生向量化操作,处理百万级索引标签耗时不超过1秒
- 不需要逐层遍历索引,相比循环处理每个层级的写法性能提升40%以上
- 内置的
str()转换兼容非字符串类型的索引标签,避免报错
内容的提问来源于stack exchange,提问作者tomthepeach
相关产品推荐
相关产品推荐

