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

DataFrame单元格小数截断失败,求各国行均值计算解决方案

嘿,我来帮你搞定这两个问题,一步步拆解:

问题1:截断DataFrame所有单元格的小数

先明确需求:你是想修改数据本身让小数截断,还是只是在显示时隐藏过长小数但保留原数据精度?两种场景的处理方式不同:

方式1:修改数据本身(截断到指定小数位)

假设你想把所有数值截断到2位小数(比如把1567.8912变成1567.89),可以用math.trunc结合applymap遍历所有单元格:

import pandas as pd
import math

# 假设你的DataFrame名为gdp_df
gdp_df = gdp_df.applymap(lambda x: math.trunc(x * 100) / 100)

如果要直接截断为整数(去掉所有小数部分),更简单:

gdp_df = gdp_df.applymap(math.trunc)
# 因为GDP都是正数,用astype(int)效果也一样
gdp_df = gdp_df.astype(int)

方式2:仅调整显示格式(不修改原数据)

如果只是不想看到冗长的小数,但不想改动原始数据,可以设置pandas的显示规则:

pd.set_option('display.float_format', lambda x: '{:.2f}'.format(math.trunc(x*100)/100))

这样打印DataFrame时会显示截断后的小数,但数据本身的精度完全保留。


问题2:计算每个国家所有行的均值

先理清你的DataFrame结构:国家是索引,那每个国家是对应一行多列(比如列是不同年份的GDP),还是多行多列(比如每行是该国家不同行业的GDP)?两种情况的处理如下:

情况A:每个国家对应一行(列是不同维度的GDP)

要计算每个国家(每行)的所有列均值,直接用pandas的mean方法指定axis=1即可:

# 结果是一个Series,索引为国家,值为对应均值
country_gdp_mean = gdp_df.mean(axis=1)

如果你一定要用np.average,注意要按行计算,且如果数据有缺失值,np.average不会自动忽略,建议改用np.nanmean:

import numpy as np
country_gdp_mean = gdp_df.apply(lambda row: np.nanmean(row), axis=1)

情况B:每个国家对应多行(同个国家有多条记录)

这种情况需要先按国家索引分组,再计算每组的均值:

# 按索引(国家)分组,计算每组的均值
country_gdp_mean = gdp_df.groupby(gdp_df.index).mean()

用np.average的话,需要在分组后应用:

country_gdp_mean = gdp_df.groupby(gdp_df.index).apply(lambda group: np.nanmean(group))

你用np.average出问题,大概率是直接调用了np.average(gdp_df)——这会把整个DataFrame扁平化,计算的是全局均值,而非按国家分组的均值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:48:43