pandas用to_csv导出pd.cut分箱的区间数据时负号乱码如何解决
问题原因
你看到的乱码是编码不匹配导致的:pd.cut生成的区间标签默认使用en dash(短破折号–,Unicode编码U+2013),不是ASCII标准减号-。pandas默认以UTF-8编码导出CSV时,这个特殊破折号会被编码为3个字节,而Excel默认用系统本地编码(中文系统一般是GBK/ANSI)打开CSV,解码错位就出现了–乱码。
解决方案
方案1:调整导出编码(最简单,无需修改原始数据)
导出CSV时指定编码为utf_8_sig,该编码带UTF-8字节序标记,Excel可自动识别不会乱码:
df.to_csv('导出文件名.csv', encoding='utf_8_sig', index=False)
方案2:替换特殊破折号为标准减号(兼容性最好)
从根源把所有特殊短破折号替换为ASCII减号,任意编码打开都不会乱码:
- 可以在分箱时手动指定标签,避免生成特殊破折号:
# 示例分箱代码,手动指定标签用标准减号 bins = [0,3,4,5,6,7,8,9,10, float('inf')] labels = ['0.00','3.0 - 3.99','4.0 - 4.99','5.0 - 5.99','6.0 - 6.99','7.0 - 7.99','8.0 - 8.99','9.0 - 9.99','10.0+'] df['Trap1_Odds'] = pd.cut(df['原始数值列'], bins=bins, labels=labels)
- 也可以分箱完成后批量替换全表的特殊破折号:
df = df.replace('–', '-', regex=False)
方案3:手动调整Excel打开方式
如果已经导出了UTF-8编码的CSV,不要直接双击打开,按以下步骤导入:
- 打开Excel,点击「数据」选项卡 → 「从文本/CSV导入」
- 选择你的CSV文件,编码选择「UTF-8」,导入即可正常显示。
内容的提问来源于stack exchange,提问作者chuky pedro
相关产品推荐
相关产品推荐

