Pandas使用map时拆分元组输出的最佳实践与报错解决
解决Pandas映射多返回值函数拆分列的报错问题
你碰到的ValueError: too many values to unpack (expected 3),是因为直接用map返回的Series赋值给多列时,Python会尝试把整个Series的所有元素(这里是7个元组)拆成3个变量,自然不匹配导致报错。
两种可行的解决方案:
方案一:用apply搭配pd.Series
把函数返回的每个元组直接转成一行三列的Series,Pandas会自动匹配到DataFrame的新列中:
import pandas as pd def last_3_divisions(number: int, divide_by: int): last_3 = {3: None, 2: None, 1: None} for x in range(3, 0,-1): number = number / divide_by last_3[x] = number return last_3[3], last_3[2], last_3[1] mydf = pd.DataFrame([8,6,7,5,3,0,9], columns=["mynum"]) # 修改后的赋值方式 mydf[["d3", "d2", "d1"]] = mydf["mynum"].apply(lambda x: pd.Series(last_3_divisions(x, 2)))
方案二:将map结果转为列表后构建DataFrame
先通过map得到含元组的Series,再把它转成列表,用这个列表直接创建DataFrame并赋值给新列:
# 先获取所有元组组成的Series tuple_results = mydf["mynum"].map(lambda x: last_3_divisions(x, 2)) # 转成列表后构建DataFrame,指定索引和原表一致 mydf[["d3", "d2", "d1"]] = pd.DataFrame(tuple_results.tolist(), index=mydf.index)
两种方法都能正确把函数返回的三个值分别拆到d3、d2、d1三列里,解决报错问题。
内容的提问来源于stack exchange,提问作者linkey apiacess
相关产品推荐
相关产品推荐

