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

如何在Pandas DataFrame中正确处理日文字符的补位填充?

解决Pandas中日文全角/半角混合字符串的等宽补位问题

问题核心在于:Python默认按Unicode代码点计数字符,但日文字符(全角汉字、假名等)在显示时占2个宽度,半角字母/数字占1个宽度。直接用str.pad会把所有字符按1个宽度计算,导致补位结果不符合预期。

解决方案步骤

  1. 先计算字符串的实际显示宽度
  2. 根据目标宽度(15)计算需要补充的半角0数量
  3. 拼接原字符串与补位的0

完整代码实现

from io import StringIO
import pandas as pd
import unicodedata

# 定义计算字符串显示宽度的函数
def get_display_width(s):
    total_width = 0
    for char in s:
        # 通过Unicode属性判断字符宽度:全角/宽字符占2,半角占1
        if unicodedata.east_asian_width(char) in ('W', 'F', 'A'):
            total_width += 2
        else:
            total_width += 1
    return total_width

# 加载原始数据
StringData = StringIO(
    """agency_code,Name
亜草 太郎32,パンダーサン
亜草 太郎3223,2
"""
)
df_orig_data = pd.read_csv(StringData, sep=",")

# 执行补位操作
df_orig_data['padded_agency_code'] = df_orig_data['agency_code'].apply(
    lambda s: s + '0' * (15 - get_display_width(s))
)

# 输出结果
print(df_orig_data['padded_agency_code'])

输出结果

0    亜草 太郎320000
1    亜草 太郎322300
Name: padded_agency_code, dtype: object

关键说明

  • unicodedata.east_asian_width():用于判断字符的东亚宽度属性,其中W/F/A对应占2宽度的全角/宽字符,其他值对应占1宽度的半角字符
  • 补位用的半角0每个占1宽度,因此直接用15 - 当前显示宽度即可得到需要补充的0的数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:20:29