gpt4 book ai didi

python - 使用 pd.Series bool 值索引 numpy 数组

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:13 26 4
gpt4 key购买 nike

我发现了一段我不太理解的代码。它基本上是这样的:

array = np.ones((5, 4))*np.nan
s1 = pd.Series([1,4,0,4,5], index=[0,1,2,3,4])
I = s1 == 4
print(I)

0 False
1 True
2 False
3 True
4 False
dtype: bool

我真的理解这部分,它返回一个 pd.Series bool 值,在 4 所在的索引处带有 True。现在,作者使用I 来索引array:

array[I,0] = 3
array[I,1] = 7
array[I,2] = 2
array[I,3] = 5
print(array)

[[ 3. 7. 2. 5.]
[ 3. 7. 2. 5.]
[ nan nan nan nan]
[ nan nan nan nan]
[ nan nan nan nan]]

新的 array 对我来说毫无意义,我想返回:

[[ nan  nan  nan  nan]
[ 3. 7. 2. 5.]
[ nan nan nan nan]
[ 3. 7. 2. 5.]
[ nan nan nan nan]]

谁能解释一下这里发生了什么,以及我如何更改上面的代码以返回我需要的内容?

最佳答案

原因在于 numpy 数组和 pandas 系列对逻辑索引 的处理方式不同。前者将 True 视为 1,将 False 视为 0,而后者在逻辑为 True 的地方选取值并在逻辑为错误。作为演示:

import numpy as np
import pandas as pd

arr = np.array([1,2,3,4,5])
arr # this is a numpy array
array([1, 2, 3, 4, 5])
arr[[True, False, True]]
array([2, 1, 2]) # check here how it is actually picking the value at position
# 1 and 0 alternatively;

ser = pd.Series([1,2,3,4,5])
ser # this is a pandas Series
0 1
1 2
2 3
3 4
4 5
dtype: int64
ser[[True, False, True]] # in pandas Series, it will pick up values where the logic is True;
0 1
2 3
dtype: int64

您会看到它们的行为有何不同。由于您的 array 是一个 numpy 数组,我们不能使用逻辑索引来获取值。为了得到你想要的结果,我们可以尝试从 I 中提取真实值的索引,然后在你的 array 上使用它:

array[I[I == True].index,0] = 3
array[I[I == True].index,1] = 7
array[I[I == True].index,2] = 2
array[I[I == True].index,3] = 5
print(array)


[[ nan nan nan nan]
[ 3. 7. 2. 5.]
[ nan nan nan nan]
[ 3. 7. 2. 5.]
[ nan nan nan nan]]

关于python - 使用 pd.Series bool 值索引 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37956088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com