使用pandas>=2.0.0时Dask按索引取列触发KeyError的兼容方案
问题原因
pandas 2.0及以上版本中,str.partition()方法返回的DataFrame默认列名从整数类型(0、1、2)改为了字符串类型('0'、'1'、'2'),而Dask会严格遵循pandas的列命名规则。你之前的代码用整数1作为索引访问列,在pandas 2.x环境下自然找不到对应的列,从而触发KeyError。
兼容解决方案
方案1:使用字符串索引访问列
直接将整数索引改为对应的字符串形式,适配pandas 2.x的列名规则:
from dask.dataframe import DataFrame ddf = DataFrame.from_dict({"A": ["A|B", "C|D"]}, npartitions=2)["A"].str.partition("|") print(ddf['1']) # 用字符串'1'替代整数1
方案2:显式指定列名
调用str.partition()时通过names参数自定义列名,彻底避免依赖默认命名的差异:
from dask.dataframe import DataFrame ddf = DataFrame.from_dict({"A": ["A|B", "C|D"]}, npartitions=2)["A"].str.partition("|", names=['left', 'sep', 'right']) print(ddf['sep']) # 使用自定义的列名访问
方案3:升级Dask到最新兼容版本
部分旧版Dask可能存在对pandas 2.x特性的适配延迟,升级到最新稳定版(如2024.6+)可能自动解决这类兼容性问题。
内容的提问来源于stack exchange,提问作者Łukasz
相关产品推荐
相关产品推荐

