python - 迭代时更新 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),而我试图将它添加到索引单元格中。我也尝试了一些不同的方法,但我得到的只是长度错误,因为每种方法都将列表添加到每一行..
关于如何实现所需结果的任何帮助?
解决方案
对数据框索引使用列表理解并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...
推荐阅读
- angular - Angular 8:PatchValue 不能与 ChangeDetector 和 UpdateValue 一起使用
- machine-learning - Rapid Miner 中的 k-means 质心图实际上是什么意思(用外行的话来说)?
- nsis - 模拟标准 Windows 弹出消息 哔声
- c++ - boost 信号和槽不在不同的线程中工作(使用 boost::asio::io_service)
- javascript - 使用 Firebase 自动注销用户
- python - 我似乎无法使用漂亮的汤从网站中提取一定的价值
- java - 转换音频文件以创建图像,并将音频文件转换为图片类可用的格式
- javascript - 如何用jquery计算表中的一些数字?
- clojure - Clojure 函数与方法的设计理念
- python - Plotly Violin Plot Add Trace 无法添加名称