Эквивалент numpy .put () в pandas - PullRequest
       0

Эквивалент numpy .put () в pandas

1 голос
/ 21 февраля 2020

Я хочу создать массив с NaN везде, кроме определенных индексов, где я размещаю некоторую строку.

def to_padded_array(vals, idxs, length, fill_na):
    arr = np.array([fill_na] * length)
    np.put(arr, idxs, vals)
    ser = pd.Series(arr)

    return tuple(ser.tolist())

У меня есть примеры vals и idx, которые выглядят так:

idxs = np.array([0,4,5]) # this was made to be a numpy array
vals = pd.Series(['a', 'b', np.nan], name='city') # this actually would come from a pd.agg function

Обратите внимание, что начальный вход vals имеет NaN. Если я пытаюсь установить fill_na=np.nan, я получаю сообщение об ошибке:

could not convert string to float: 'a'

Если я использую fill_na=None, я получаю None и NaN, что не хорошо:

>>> to_padded_array(vals, idxs, length=6,fill_na=None)
('a', None, None, None, 'b', nan)

Я думал об использовании pandas для обойти эту проблему, но я еще не нашел эквивалент для numpy.put для pandas. Что я могу с этим поделать?

1 Ответ

2 голосов
/ 21 февраля 2020

Вы можете использовать Series.reindex здесь:

Пример

def to_padded_array(vals, idxs, length):
    # Note that `vals` is a pd.Series object.
    ser = pd.Series(vals.values, index=idxs).reindex(np.arange(length))
    # if vals is an array, then vals can be used instead of vals.values 
    return tuple(ser.tolist())

to_padded_array(vals,idxs, 6)

[out]

('a', nan, nan, nan, 'b', nan)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...