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

如何合并Pandas DataFrame数据并计算统计值(去除NaN)

问题原因

你遇到的NaN是因为iloc取的两部分数据来自不同列,concat时会保留原列名,导致合并后的DataFrame有两列,每列只有4个有效值,其余都是NaN。另外你写的numeric_only=int是错误用法,这个参数需要传布尔值True/False,不是int类型,这也是均值计算失败的原因之一。

解决方案

方案1:合并成无NaN的一维数据(列表/Series)

直接把两部分数据提取成一维格式,再合并,这样就不会有NaN:

# 取数据时用单索引(避免得到二维DataFrame)
n1 = df.iloc[0:4, 2]  # 得到单列Series
n2 = df.iloc[4:8, 13]  # 注意:原代码4:9会取5行,你说总共有8个值,所以应该是4:8(左闭右开)

# 合并成一个Series
total = pd.concat([n1, n2], axis=0)

# 计算均值
mean = total.mean()

如果要转成普通列表,直接用total.tolist()即可。

方案2:直接计算统计值,无需合并

不用合并数据,直接对两部分数据的集合计算均值:

mean = pd.concat([df.iloc[0:4,2], df.iloc[4:8,13]]).mean()

或者用numpy直接计算:

import numpy as np
mean = np.mean(np.concatenate([df.iloc[0:4,2].values, df.iloc[4:8,13].values]))

方案3:修复原合并代码,处理NaN后计算

如果一定要保留原DataFrame结构,可以先把两列的数据合并到同一列,再去掉NaN:

n1 = df.iloc[0:4,2:3]
n2 = df.iloc[4:8,13:14]

# 把n2的列名改成和n1一致,再合并
n2.columns = n1.columns
total = pd.concat([n1, n2], axis=0)

# 去掉NaN后计算均值
mean = total.dropna().mean()

或者直接在计算均值时忽略NaN(Pandas的mean默认就忽略NaN,只要列是数值型):

# 注意numeric_only传True,不是int
mean_cols = total.mean(axis=0, numeric_only=True)
# 若要整体所有有效值的均值,拉平后计算
mean_total = total.stack().mean()

内容的提问来源于stack exchange,提问作者St. Jimmy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:05:16