遍历DataFrame计算统计量写CSV触发'float' object is not subscriptable报错
问题根源
触发报错的直接原因:你尝试对单个浮点数执行下标索引操作(
skewVal[0]/kurtVal[0])
scipy.stats模块的skew()和kurtosis()函数,当输入为一维数据序列(比如你代码中dfxz[i]指代的DataFrame单列数据)时,返回值是单个浮点型数值,而非数组/列表- 浮点数本身不支持下标访问(即不能被“subscriptable”),因此触发
TypeError - 你此前将DataFrame原始值从
float转int的操作完全不相关——错误出在计算结果的取值逻辑,而非输入数据的类型
修复方案
核心修改:移除冗余的下标索引
去掉skewVal和kurtVal后的[0],直接使用计算得到的单值。
优化:避免重复IO操作(可选但更规范)
原代码在循环内反复打开/关闭CSV文件,效率低且易出现文件句柄异常,建议改为循环外统一打开文件。
修正后可运行的代码示例
import numpy as np from scipy.stats import skew, kurtosis # 循环外统一打开文件,自动管理句柄 with open('tabel.csv', 'a', newline='', encoding='utf-8') as csv: # 规范遍历DataFrame的所有列 for col_name in dfxz.columns: col_data = dfxz[col_name] # 计算统计值 mean_val = np.mean(col_data) variance_val = np.var(col_data) skew_val = skew(col_data) kurt_val = kurtosis(col_data) # 直接写入单值(无下标) csv.write(f"{mean_val},{variance_val},{skew_val},{kurt_val},1\n")
内容的提问来源于stack exchange,提问作者Fazrial Feizal
相关产品推荐
相关产品推荐

