Pandas Panel已废弃,求将旧代码适配最新Pandas版本的解决方案
替代已废弃Pandas Panel的兼容写法
你提到的这段依赖pd.Panel的代码确实在新版Pandas里跑不通了——Panel早在0.25版本就被正式移除了,官方推荐了两种替代方案,我帮你分别改写适配:
方案一:使用MultiIndex DataFrame(推荐,贴近Pandas原生操作)
原来的Panel是把多个DataFrame作为items维度(对应axis=0),我们可以把这些DataFrame合并成一个带层次化索引的DataFrame,用groupby来模拟Panel的apply(axis=0)逻辑:
# 将df1和df2合并为带MultiIndex列的DataFrame,外层列名对应原Panel的items combined_df = pd.concat([df1, df2], axis=1, keys=['df1', 'df2']) # 按外层列分组,对每个组(即原有的单个DataFrame)应用report_diff diff_output = combined_df.groupby(level=0, axis=1).apply(report_diff)
如果你的report_diff是按行维度处理数据,也可以把keys放到行索引上:
combined_df = pd.concat([df1, df2], axis=0, keys=['df1', 'df2']) diff_output = combined_df.groupby(level=0).apply(report_diff)
核心是把原Panel的items维度转换成MultiIndex的一个层级,这样groupby就能精准定位到每个原始DataFrame进行处理,和原代码逻辑完全一致。
方案二:使用xarray(适合多维数据场景)
如果你的数据涉及更复杂的多维操作,官方提到的to_xarray是很好的选择,我们可以直接把DataFrame转成xarray Dataset后操作:
import xarray as xr # 将两个DataFrame转换为xarray Dataset,每个DataFrame对应一个变量 ds = xr.Dataset({'df1': df1.to_xarray(), 'df2': df2.to_xarray()}) # 沿变量维度(对应原Panel的items)应用report_diff diff_output = ds.apply(report_diff, dim='variable')
xarray的多维数据模型和原Panel非常接近,能无缝承接原来的多维操作逻辑。
内容的提问来源于stack exchange,提问作者yadav
相关产品推荐
相关产品推荐

