Почему иногда нам нужно добавлять .values, когда мы делаем поэлементную операцию в pandas? - PullRequest
1 голос
/ 05 марта 2020

Предположим, у меня есть фрейм данных, похожий на

    A
0   0
1   1
2   2
3   3

, и когда я запускаю:

a = df.loc[np.arange(0,2)] / df.loc[np.arange(2,4)]

, я получаю

     A
0   NaN
1   NaN
2   NaN
3   NaN

Я знаю, что могу получить правильный результат, написав

a = df.loc[np.arange(0,2)].values / df.loc[np.arange(2,4)]
b = df.loc[np.arange(0,2)] / df.loc[np.arange(2,4)].values

Кто-нибудь может объяснить, почему?

1 Ответ

1 голос
/ 05 марта 2020

Из-за того, что pandas чувствителен к index и columns, при выполнении вычисления скрытый ключ для них сначала получает совпадение, если нам нужно только получить совпадение значения и удалить влияние индекса и столбцов. добавление .values или to_numpy(), однако, индекс также дает некоторое преимущество

Индекс примера 1 не совпадает, поэтому значение будет возвращать NaN

s1=pd.Series([1],index=[1])
s2=pd.Series([1],index=[999])
s1/s2
1     NaN
999   NaN
dtype: float64
s1.values/s2.values
array([1.])

Индекс примера 2 соответствует так pandas вернет значение при совпадении индекса

s1=pd.Series([1],index=[1])
s2=pd.Series([1,999],index=[1,999])
s1/s2
1      1.0
999    NaN
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...