如果之前有人问过,请道歉,不知怎的,我无法找到答案.
假设我有两个值列表:
rows = [0,1,2]
cols = [0,2,3]
Run Code Online (Sandbox Code Playgroud)
它分别代表行和列的索引.这两个列表在矩阵中组合了表示的坐标,即(0,0),(1,2),(2,3).
我想使用这些坐标来改变dataframe不使用循环的特定单元格.
在numpy中,这是微不足道的:
data = np.ones((4,4))
data[rows, cols] = np.nan
array([[nan, 1., 1., 1.],
[ 1., 1., nan, 1.],
[ 1., 1., 1., nan],
[ 1., 1., 1., 1.]])
Run Code Online (Sandbox Code Playgroud)
但在熊猫中,我似乎陷入了一个循环:
df = pd.DataFrame(np.ones((4,4)))
for _r, _c in zip(rows, cols):
df.iat[_r, _c] = np.nan
Run Code Online (Sandbox Code Playgroud)
有没有办法用于列出类似坐标索引的向量来直接修改pandas中的单元格?
请注意,答案不是使用iloc,而是选择整个行和列的交集.
很简单!利用 pandas 建立在上面的事实numpy并使用DataFrame.values
df.values[rows, cols] = np.nan
Run Code Online (Sandbox Code Playgroud)
输出:
0 1 2 3
0 NaN 1.0 1.0 1.0
1 1.0 1.0 NaN 1.0
2 1.0 1.0 1.0 NaN
3 1.0 1.0 1.0 1.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |