生成CDF时触发TypeError的原因及解决咨询
解决Haberman数据集生成PDF/CDF的TypeError问题
错误根源
- 筛选条件类型不匹配:你用字符串
"1"/"2"匹配survival_status列,但该列实际存储为整数类型,导致筛选后可能得到空DataFrame。 - 数值列类型错误:
age列若被解析为字符串类型,numpy无法对其执行isfinite等数值运算,直接触发类型错误。
修复步骤
- 加载数据时强制将
age和survival_status解析为数值类型。 - 使用整数而非字符串作为筛选条件。
- 验证筛选后的数据集非空,避免空数据导致的计算异常。
修正后的完整代码
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
相关产品推荐
相关产品推荐

