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

Azure ML Studio中Pandas多列explode函数报错问题排查

解决Azure ML Studio中Pandas 1.0.4版本的多列展开问题

问题核心

Azure ML Studio默认锁定了Pandas 1.0.4版本,这个版本的explode仅支持单列输入(传入列表会报column must be a scalar);同时高版本Pandas的自定义展开方案依赖pandas._typing.AggFuncType,而1.0.4版本无此内部类型,导致报错。另外,代码内的pip install指令会被环境优先级覆盖,无法生效。

兼容Pandas 1.0.4的多列展开方案

方案1:自定义行展开函数(适合少量数据)

利用zip将对应列的列表元素配对,逐行生成子DataFrame后合并,完全兼容1.0.4版本:

import pandas as pd

# 替换成你的原始DataFrame,确保name和id列的列表长度一致
df = pd.DataFrame({
    'name': [['Alice', 'Bob'], ['Charlie']],
    'id': [[1, 2], [3]],
    'category': ['group1', 'group2']
})

def expand_row(row):
    # 配对name和id的元素
    paired = list(zip(row['name'], row['id']))
    # 生成包含所有列的子DataFrame
    return pd.DataFrame({
        'name': [p[0] for p in paired],
        'id': [p[1] for p in paired],
        'category': [row['category']] * len(paired)
        # 这里添加你需要保留的其他列,格式同上
    })

# 合并所有行的展开结果
new_df = pd.concat([expand_row(row) for _, row in df.iterrows()], ignore_index=True)

方案2:分步单列展开再对齐(适合大数据量)

先给每行添加临时索引,分别展开两列后按索引和其他列对齐,避免逐行迭代的性能问题:

import pandas as pd

df = pd.DataFrame({
    'name': [['Alice', 'Bob'], ['Charlie']],
    'id': [[1, 2], [3]],
    'category': ['group1', 'group2']
})

# 添加临时索引,用于后续对齐
df['temp_idx'] = df.index

# 分别展开name和id列
expanded_name = df.explode('name').reset_index(drop=True)
expanded_id = df.explode('id').reset_index(drop=True)

# 按临时索引和非列表列合并,确保元素对应
new_df = pd.merge(
    expanded_name, 
    expanded_id, 
    on=['temp_idx', 'category'], 
    suffixes=('_name', '_id')
)

# 整理列名并删除临时索引
new_df = new_df.rename(columns={'name_name': 'name', 'id_id': 'id'})
new_df = new_df.drop('temp_idx', axis=1)

关于环境升级的补充

如果需要长期使用高版本Pandas,可通过Azure ML Studio创建自定义conda环境:

  • 编写environment.yml配置文件,指定pandas=1.4.4
  • 在运行脚本的计算实例中选择该自定义环境,替代默认环境

内容的提问来源于stack exchange,提问作者Johemian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:05:18