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

使用Dask读取7GB CSV时遇NotImplementedError及func未定义问题

问题解决:Dask处理CSV时的标准化错误

错误原因分析

  1. 第一个错误NotImplementedError: dd.DataFrame.apply only supports axis=1:
    Dask的dd.DataFrame.apply仅支持**按行(axis=1)**执行函数,而你要对数值列做标准化(按列计算均值、标准差),默认的axis=0(按列)用法在Dask中不被支持。

  2. 第二个错误func is not defined:
    你按提示添加axis=1后,逻辑完全偏离了按列标准化的需求——此时apply会把每行数据传给函数,而你可能误将lambda替换成了未定义的func,或者修改后的代码逻辑混乱导致变量未定义。

正确解决方案

要实现数值列的z-score标准化((x-均值)/标准差),不需要用apply,直接利用Dask的列运算特性即可,步骤如下:

修正后的代码

import dask.dataframe as dd

# 读取7GB CSV文件
df = dd.read_csv('CICIDSs.csv')

# 先填充缺失值为0(避免缺失值影响均值/标准差计算)
df_filled = df.fillna(0)

# 筛选所有非object类型的数值列
features = df_filled.dtypes[df_filled.dtypes != 'object'].index

# 计算每列的均值和标准差(Dask延迟计算,无需提前加载全量数据)
mean_vals = df_filled[features].mean().persist()  # persist缓存统计量,避免重复计算
std_vals = df_filled[features].std().persist()

# 执行标准化运算
df_filled[features] = (df_filled[features] - mean_vals) / std_vals

print('===== Data Preprocessing =====')
# 若需查看结果,用compute()触发实际计算(注意:大文件需确保内存足够,或仅查看前几行df_filled.head())
print(df_filled.compute())

关键说明

  • 优先填充缺失值:如果先做标准化,缺失值会导致均值/标准差计算不准确,因此先执行fillna(0)。
  • 用persist()优化性能:均值和标准差是全局统计量,只需计算一次,persist()会将结果缓存到内存/磁盘,避免后续重复计算。
  • Dask延迟计算特性:直接print(df_filled)只会显示数据结构元信息,需用compute()触发实际运算;若内存不足,建议用df_filled.head()查看前几行结果,而非全量compute()。

内容的提问来源于stack exchange,提问作者Krizel Delos Reyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:38:29