gpt4 book ai didi

Python pandas,.apply,使用多个返回值

转载 作者:行者123 更新时间:2023-11-28 22:21:22 34 4
gpt4 key购买 nike

in[1]:  

import pandas as pd

def somefunc(input1, input2):
output1 = 1
output2 = 2

return [output1, output2]


d = {'col1': ['A1', 'B1'], 'col2': ['A2', 'B2']}
df = pd.DataFrame(data=d)

df[['col3', 'col4']] = df.apply(lambda x: somefunc(x['col1'], x['col2']),
axis=1)

print df

out[1]:

col1 col2 col3 col4
0 A1 A2 1 2
1 B1 B2 1 2

一些功能:
- 使用参数 input1 和 input2 从 url 中的 json 中获取数据并将其放入 新数据框 df2
- 使用来自 df2
的值创建 output1、output2- 计算输出变量以节省 RAM 时删除数据帧

这执行得很好,但我想返回 3 个返回错误的值

in[2]:  

import pandas as pd

def somefunc(input1, input2):
output1 = 1
output2 = 2
output3 = 3


return [output1, output2, output3]


d = {'col1': ['A1', 'B1'], 'col2': ['A2', 'B2']}
df = pd.DataFrame(data=d)

df[['col3', 'col4', 'col5']] = df.apply(lambda x: somefunc(x['col1'], x['col2']),
axis=1)

print df

out[2]:
"ValueError: Columns must be same length as key"

错误与我的实际程序不同,但我想它是相关的;

KeyError: "['col3' 'col4' 'col5'] not in index"

为什么这适用于一个和两个输出而不是三个?
Python 2.7.14

最佳答案

解决方案是从自定义函数返回 Series:

def somefunc(input1, input2):
output1 = 1
output2 = 2
output3 = 3

return pd.Series([output1, output2, output3])

d = {'col1': ['A1', 'B1'], 'col2': ['A2', 'B2']}
df = pd.DataFrame(data=d)

df[['col3', 'col4', 'col5']] = df.apply(lambda x: somefunc(x['col1'], x['col2']), axis=1)
print (df)
col1 col2 col3 col4 col5
0 A1 A2 1 2 3
1 B1 B2 1 2 3

或者通过构造函数从 list 中创建 DataFrame:

def somefunc(input1, input2):
output1 = 1
output2 = 2
output3 = 3

return [output1, output2, output3]

d = {'col1': ['A1', 'B1'], 'col2': ['A2', 'B2']}
df = pd.DataFrame(data=d)

df1 = df.apply(lambda x: somefunc(x['col1'], x['col2']), axis=1)
df[['col3', 'col4', 'col5']] = pd.DataFrame(df1.values.tolist())
print (df)
col1 col2 col3 col4 col5
0 A1 A2 1 2 3
1 B1 B2 1 2 3

关于Python pandas,.apply,使用多个返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48383520/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com