2017-01-06 2 views
3

Я экспериментирую с методом where() в пандах. Я бег простого примера на странице документации с другой являясь pd.Series и я, который я пренебрежимо малый не могу объяснить:Где() метод в Pandas с другим Pd.Series

Примера dataframe является:

df = pd.DataFrame(np.arange(10).reshape(-1, 2), columns=['A', 'B']) 

где() оговорка:

m = df % 3 == 0 
n = pd.Series([100, 200]) 
df.where(m, n, axis = 1) 

метод возвращает следующий dataframe:

A B 
0 0.0 NaN 
1 NaN 3.0 
2 NaN NaN 
3 6.0 NaN 
4 NaN 9.0 

Я ожидал увидеть 1 00 в A и 200 в B вместо NaN.

Не могли бы вы объяснить NaN? Ваш совет будет оценен по достоинству.

ответ

4

Ваша серия, п, не имеет соответствующих меток:

n 
Out: 
0 100 
1 200 
dtype: int64 

Если вы используете это в качестве параметра other, он будет использовать эту серию только тогда, когда индекс одинакова (по столбцам имени 0 и 1). Если он не сможет их найти, он отобразит NaN. Однако, если вы измените метки:

n.index = ['A', 'B'] 

n 
Out: 
A 100 
B 200 
dtype: int64 

Теперь он будет работать, как вы ожидаете:

df.where(m, n, axis = 1) 
Out: 
    A B 
0 0 200 
1 100 3 
2 100 200 
3 6 200 
4 100 9 
Смежные вопросы