将result_type与pandas一起使用应用函数

Ak-*_*-Mo 6 python dataframe pandas

我想在我创建的pandas.DataFrame上使用apply,并为每一行返回一个值列表,其中每个值本身就是一列.

我写了以下代码:

import pandas as pd

def get_list(row):
  return [i for i in range(5)]

df = pd.DataFrame(0, index=np.arange(100), columns=['col'])


df.apply(lambda row: get_list(row), axis=1, result_type='expand')
Run Code Online (Sandbox Code Playgroud)

当我添加result_type='expand'以便将返回的数组更改为单独的列时,我收到以下错误:

TypeError: ("<lambda>() got an unexpected keyword argument 'result_type'", 'occurred at index 0')
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除该result_type字段它运行正常(返回一列数组),可能是什么问题?

  • 我正在使用colab来运行我的代码

iDr*_*ish 9

此代码适用于pandas版本0.23.3,正确您只需要pip install --upgrade pandas在终端中运行.

要么

你可以在没有result_type如下的情况下完成它:

def get_list(row):
    return pd.Series([i for i in range(5)])

df = pd.DataFrame(0, index=np.arange(100), columns=['col'])
pd.concat([df, df.apply(get_list, axis=1)], axis=1)

    col 0   1   2   3   4
0   0   0   1   2   3   4
1   0   0   1   2   3   4
2   0   0   1   2   3   4
3   0   0   1   2   3   4
4   0   0   1   2   3   4
...
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你不需要lambda它,你可以只:

df.apply(get_list, axis=1, result_type='expand')
Run Code Online (Sandbox Code Playgroud)

更新 结果类型已在pandas 0.23的发布说明中公布:https://pandas.pydata.org/pandas-docs/stable/whatsnew.html#whatsnew-0230所以我担心你必须更新.

  • 如果OP无法升级模块怎么办? (2认同)