首页 > 解决方案 > 迭代时更新 Dataframe - Python

问题描述

这是我第一次与DataFrame我一起工作,我严重卡在我需要更新的地方DataFrame

我的数据框对象有一些基本值,例如userId, userName, address,然后我需要调用一个返回值列表(当前为 36 个值)的模型。我需要将该值附加到现有的数据框对象中。在单个单元格中或在同一行的多个单元格中。

但是我在尝试不同的方法时遇到了不同的错误。

这是我当前的数据框:

UserId UserName Address 
1      User1    Add1
2      User2    Add2

这就是我想要做的:

UserId UserName Address Res
1      User1    Add1    [1,2,3...36]
2      User2    Add2    [1,2,3...36]

或者是这样的:

UserId UserName Address Res1 Res2 Res3... Res36
1      User1    Add1    1      2    3 ... 36
2      User2    Add2    1      2    3 ... 36

目前我正在使用这种方法..

for index, row in rawData.iterrows():
    res = calculateData(row)
    rawData['res'] = pd.Series(res, index=rawData.index)

它抛出这个错误:

ValueError:传递值的长度是 36,索引意味着 96。

在调试时,我知道,它试图为我的数据框中的每一行(96)添加所有值(36),而我试图将它添加到索引单元格中。我也尝试了一些不同的方法,但我得到的只是长度错误,因为每种方法都将列表添加到每一行..

关于如何实现所需结果的任何帮助?

标签: pythonpandasdataframe

解决方案


对数据框索引使用列表理解并calculateData在列表理解中调用函数。

假设您的函数calculateData定义如下:

def calculateData(x):
    return np.arange(36) + x.name


rawData['res'] = [calculateData(rawData.loc[i]) for i in rawData.index]

Out[20]:
   UserId UserName Address                                                res
0       1    User1    Add1  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...
1       2    User2    Add2  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14...

推荐阅读