如何合并列不同的Dask DataFrame?遇NotImplementedError问题
Dask DataFrame合并报错原因及解决方法
问题核心原因
- 你定义的
df_temp和df_all是普通Python列表,并非Dask DataFrame对象,但直接调用了Dask的concat/append方法。新版本Dask会严格校验输入类型,不允许对非Dask DataFrame对象执行这类操作;而旧版本可能存在隐式转换的兼容逻辑,因此旧环境能正常运行。 - 错误栈中的
NotImplementedError(key)直接印证了这一点:Dask试图对列表执行DataFrame的列索引操作(df[col]),但列表不支持这种索引方式,最终触发报错。
解决步骤
1. 将列表转换为Dask DataFrame
列表的第一行是列名,后续是数据行,需先转换成Pandas DataFrame,再转为Dask DataFrame:
import dask.dataframe as dd import pandas as pd # 处理df_temp cols_temp = df_temp[0] data_temp = df_temp[1:] df_temp_dd = dd.from_pandas(pd.DataFrame(data_temp, columns=cols_temp), npartitions=1) # 处理df_all cols_all = df_all[0] data_all = df_all[1:] df_all_dd = dd.from_pandas(pd.DataFrame(data_all, columns=cols_all), npartitions=1)
2. 正确执行合并操作
使用dd.concat进行行合并,由于两个DataFrame的列不完全匹配,合并后缺失的列会自动填充为NaN:
merged_df = dd.concat([df_temp_dd, df_all_dd], axis=0, ignore_index=True)
补充说明
如果你的原始代码中实际调用的是append(错误栈显示执行了append),Dask的append本质也是调用concat,因此同样需要确保输入是Dask DataFrame对象。
内容的提问来源于stack exchange,提问作者N27
相关产品推荐
相关产品推荐

