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

函数中执行DataFrame列拆分时触发ValueError:无法将多列赋值给单列

解决DataFrame拆分列函数中的ValueError问题

报错原因

你触发的ValueError: Cannot set a DataFrame with multiple columns to the single column Column Val1,本质是函数内部的split_column_1/split_column_2返回了多列的DataFrame结构,但你直接将其赋值给单个列,违反了Pandas的赋值规则。而把逻辑移出函数后,你可能无意中调整了赋值逻辑(比如直接拆分后取单列),所以未触发报错。

核心需求实现

你的目标是拆分「Splittable column」的最后一个逗号,将前后部分分别存入「Column Val1」和「Column Val2」,用str.rsplit(从右往左拆分)是最直接的方案,无需定义两个额外函数。

修复后的函数实现

import pandas as pd

def Process_DF(df):
    # 从右往左仅拆分1次,生成包含两列的DataFrame
    split_df = df['Splittable column'].str.rsplit(',', n=1, expand=True)
    # 分别赋值到新列,处理空值情况
    df['Column Val1'] = split_df[0].fillna('')
    df['Column Val2'] = split_df[1].fillna('')
    # 删除原拆分列
    df.drop('Splittable column', axis=1, inplace=True)
    return df

# 测试示例数据
data = {'Index': ['1', '2', '3','4'], 'Splittable column': [',FALSE', 'Not Acceptable,Failed,NAN,FALSE', 'Not acceptable,FALSE',',FALSE']}
DF_6cols = pd.DataFrame(data)
processed_df = Process_DF(DF_6cols)
print(processed_df)

保留内部函数的修正版本

如果一定要保留split_column_1和split_column_2的结构,需确保内部函数返回单列Series而非多列DataFrame:

def Process_DF(df):
    def split_column_1(col):
        # 提取最后一个逗号前的内容
        return col.str.rsplit(',', n=1).str[0].fillna('')
    
    def split_column_2(col):
        # 提取最后一个逗号后的内容
        return col.str.rsplit(',', n=1).str[1].fillna('')
    
    df['Column Val1'] = split_column_1(df['Splittable column'])
    df['Column Val2'] = split_column_2(df['Splittable column'])
    df.drop('Splittable column', axis=1, inplace=True)
    return df

关键说明

  • str.rsplit(',', n=1):n=1限制仅拆分1次,确保只获取最后一个逗号的前后部分。
  • fillna(''):处理像,FALSE这种开头就是逗号的情况,避免拆分后出现空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:27:11