我想在创建的apply上使用pandas.DataFrame,并为每一行返回一个值列表,其中每个值本身就是一列。
我编写了以下代码:
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')
当我添加result_type='expand'
以便将返回的数组更改为单独的列时,出现以下错误:
TypeError: ("<lambda>() got an unexpected keyword argument 'result_type'", 'occurred at index 0')
但是,如果我放下result_type
字段,它运行正常(返回一列数组),可能是什么问题?
答案 0 :(得分:7)
此代码在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
...
顺便说一句,您不需要lambda
,只需:
df.apply(get_list, axis=1, result_type='expand')
更新 在熊猫0.23:https://pandas.pydata.org/pandas-docs/stable/whatsnew.html#whatsnew-0230的发行说明中宣布了result_type,因此恐怕您将需要更新。