python - Pandas lambda 多个参数返回

标签 python python-3.x pandas lambda arguments

import pandas as pd
import numpy as np

def ced(x):
    return x+1, x+2, x+3


df = pd.DataFrame(data=[[1,2],[10,20]], columns=['a','b'])


df['x'], df['y'], df['z'] = df['a'].apply(lambda x: ced(x)) 


print(df)

错误:

line 11, in df['x'], df['y'], df['z'] = df['a'].apply(lambda x: ced(x)) ValueError: not enough values to unpack (expected 3, got 2)

这个东西适用于

import pandas as pd
import numpy as np

def ced(x):
    return x+1, x+2


df = pd.DataFrame(data=[[1,2],[10,20]], columns=['a','b'])


df['x'], df['y'] = df['a'].apply(lambda x: ced(x)) 


print(df)

输出:

    a   b  x   y
0   1   2  2  11
1  10  20  3  12

我不知道这里出了什么问题。

最佳答案

我建议更改返回Series 和新列子集的函数:

def ced(x):
    return pd.Series([x+1, x+2, x+2])

df = pd.DataFrame(data=[[1,2],[10,20]], columns=['a','b'])


df[['x','y', 'z']] = df['a'].apply(lambda x: ced(x)) 

print(df)
    a   b   x   y   z
0   1   2   2   3   3
1  10  20  11  12  12

另一种解决方案是通过构造函数创建DataFrame:

def ced(x):
    return x+1, x+2, x+2

df = pd.DataFrame(data=[[1,2],[10,20]], columns=['a','b'])


df[['x','y', 'z']] = pd.DataFrame(df['a'].apply(lambda x: ced(x)).values.tolist())
print(df)
    a   b   x   y   z
0   1   2   2   3   3
1  10  20  11  12  12

关于python - Pandas lambda 多个参数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51283361/

相关文章:

python - Python 3.2 中的 HEX 解码

python - 将文本转换为向量

python - 如何在没有 for 循环的情况下从现有列中有效地创建标签列并将它们放在后面

python - 将 Pandas 数据框转换为包含字典或列表列表

不进入特定文件夹的 Python walker

python - 如何解析包含相似数据的不同 JSON 模式?

python - 迭代删除 numpy 数组中的行

python - 如何从python中的父文件夹导入函数?

python - 使用 df2gsheets 将 pandas DF 从 python 导入 google 表时出现数据格式问题

python - 优化字符串生成和测试