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

生成CDF时触发TypeError的原因及解决咨询

解决Haberman数据集生成PDF/CDF的TypeError问题

错误根源

  1. 筛选条件类型不匹配:你用字符串"1"/"2"匹配survival_status列,但该列实际存储为整数类型,导致筛选后可能得到空DataFrame。
  2. 数值列类型错误:age列若被解析为字符串类型,numpy无法对其执行isfinite等数值运算,直接触发类型错误。

修复步骤

  1. 加载数据时强制将age和survival_status解析为数值类型。
  2. 使用整数而非字符串作为筛选条件。
  3. 验证筛选后的数据集非空,避免空数据导致的计算异常。

修正后的完整代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 加载数据集并指定列名,强制数值类型解析
df = pd.read_csv("haberman.csv", header=None, names=["age", "year", "nodes", "survival_status"])
df["survival_status"] = df["survival_status"].astype(int)
df["age"] = df["age"].astype(int)

# 用整数筛选生存状态(1=存活,2=未存活)
df_1 = df.loc[df["survival_status"] == 1]
df_2 = df.loc[df["survival_status"] == 2]

# 校验筛选结果非空
if df_1.empty:
    raise ValueError("未找到survival_status=1的记录,请检查数据格式")
if df_2.empty:
    raise ValueError("未找到survival_status=2的记录,请检查数据格式")

# 计算直方图、PDF与CDF
counts, bin_edges = np.histogram(df_1["age"], bins=10, density=None)
pdf = counts / sum(counts)
cdf = np.cumsum(pdf)

# 可视化PDF和CDF
plt.plot(bin_edges[1:], pdf, label="PDF")
plt.plot(bin_edges[1:], cdf, label="CDF")
plt.xlabel("Age")
plt.ylabel("Probability")
plt.title("PDF & CDF of Age (Survived Patients)")
plt.legend()
plt.show()

额外检查项

  • 若运行仍报错,先执行print(df.dtypes)确认age和survival_status为int/float类型。
  • 若数据集列名与代码中不一致,需根据实际文件调整names参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:15:35