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

在Colab中处理DataFrame:保留两位小数并设置百分比格式

问题分析与修正方案

你的代码主要存在三个问题:

  • 变量未定义:代码中percentage是未声明的变量,实际应该引用value_percentage中的数值列
  • DataFrame操作错误:value_counts(normalize=True)返回的是DataFrame,不能直接用*100批量运算,需要指定目标列
  • 列名混乱:直接拼接会导致列名重复,后续导出Excel后可读性差

修正后的代码(导出带百分比字符串的结果)

import pandas as pd

# 假设你的原始DataFrame为df
li = []

for col in df.columns:
    # 计算类别频数
    value_counts = df[col].value_counts().to_frame().reset_index()
    # 重命名列,明确含义
    value_counts.columns = [f'{col}_类别', f'{col}_频数']
    
    # 计算百分比(normalize=True返回0-1的小数)
    value_percentage = df[col].value_counts(normalize=True).to_frame().reset_index()
    value_percentage.columns = [f'{col}_类别', f'{col}_百分比']
    # 转换为保留两位小数的百分比字符串
    value_percentage[f'{col}_百分比'] = value_percentage[f'{col}_百分比'].apply(lambda x: f'{x*100:.2f}%')
    
    # 合并同一列的频数和百分比,避免类别错位
    combined_col = pd.merge(value_counts, value_percentage, on=f'{col}_类别')
    li.append(combined_col)

# 按列拼接所有统计结果
data = pd.concat(li, axis=1)

# 导出到Excel
data.to_excel('类别统计结果.xlsx', index=False)

进阶方案:导出可计算的Excel百分比格式

如果希望Excel中的百分比是可参与运算的数值格式(而非字符串),可以用以下方式:

import pandas as pd
from openpyxl.styles import numbers

li = []

for col in df.columns:
    value_counts = df[col].value_counts().to_frame().reset_index()
    value_counts.columns = [f'{col}_类别', f'{col}_频数']
    
    value_percentage = df[col].value_counts(normalize=True).to_frame().reset_index()
    value_percentage.columns = [f'{col}_类别', f'{col}_百分比']
    # 保留4位小数(对应百分比的两位小数)
    value_percentage[f'{col}_百分比'] = value_percentage[f'{col}_百分比'].round(4)
    
    combined_col = pd.merge(value_counts, value_percentage, on=f'{col}_类别')
    li.append(combined_col)

data = pd.concat(li, axis=1)

# 导出时设置Excel单元格为百分比格式
with pd.ExcelWriter('可计算统计结果.xlsx', engine='openpyxl') as writer:
    data.to_excel(writer, index=False, sheet_name='统计数据')
    worksheet = writer.sheets['统计数据']
    # 遍历所有百分比列,设置格式
    for col_idx, col_name in enumerate(data.columns):
        if '百分比' in col_name:
            # Excel列号从1开始,chr(65+col_idx)对应A、B、C...
            worksheet.column_dimensions[chr(65 + col_idx)].number_format = '0.00%'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:55:31