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

机器学习模型DataFrame分组异常:df2丢失L与400列求助

问题分析与解决办法

核心异常原因

  • 数据类型不匹配:虽然df1和df2列名完全一致,但df2的L和400列大概率是object(字符串)类型,而groupby.mean()只会对数值型(int/float)列执行计算,非数值列会被自动过滤。df1的这两列是数值型,所以能被保留。
  • 全空值导致列被丢弃:df2的L或400列在所有分组中都是空值(NaN),部分场景下pandas会自动移除全NaN的列。
  • 分组内无有效数值:如果df2的这两列存在非数字的字符串内容,mean()无法完成计算,会直接排除该列。

针对性解决办法

1. 检查并修正数据类型

先对比两表的列类型,定位问题:

print("df1 列类型:\n", df1.dtypes)
print("\ndf2 列类型:\n", df2.dtypes)

如果df2的L/400是object类型,转换为数值型:

import pandas as pd
df2['L'] = pd.to_numeric(df2['L'], errors='coerce')
df2['400'] = pd.to_numeric(df2['400'], errors='coerce')

errors='coerce'会把无法转换的内容转为NaN,后续可根据业务逻辑填充空值(比如用0、分组均值等)。

2. 排查并处理空值

检查空值分布:

print("df2 L列空值数:", df2['L'].isna().sum())
print("df2 400列空值数:", df2['400'].isna().sum())

如果是全空值,可填充默认值后再聚合:

df2['L'] = df2['L'].fillna(0)  # 替换为符合业务逻辑的数值
df2['400'] = df2['400'].fillna(0)

3. 显式指定聚合列

如果确认列是数值型但仍被过滤,可强制指定所有需要聚合的列,避免自动筛选:

agg_cols = [col for col in df2.columns if col not in ["PlottedFind", "Assemblage"]]
result_df2 = df2.groupby(["PlottedFind","Assemblage"], as_index=False).agg({col: 'mean' for col in agg_cols})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:42:49