Я хочу использовать numpyp.where
на фрейме данных pandas, чтобы проверить наличие определенной строки в столбце. Если строка присутствует, примените функцию split и возьмите второй элемент списка, если не просто первый символ. Однако следующий код не работает, он выдает IndexError: list index out of range
, потому что первая запись не содержит подчеркивания:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A':['a','a_1','b_','b_2_3']})
df["B"] = np.where(df.A.str.contains('_'),df.A.apply(lambda x: x.split('_')[1]),df.A.str[0])
Только вызов np.where
возвращает массив индексов, для которых условие выполняется, поэтому у меня сложилось впечатление, что команда split
будет использоваться только для этого подмножества данных:
np.where(df.A.str.contains('_'))
Out[14]: (array([1, 2, 3], dtype=int64),)
Но, по-видимому, split
-команда используется для всего нефильтрованного массива, что мне кажется странным, поскольку это выглядит как потенциально большое количество ненужных операций, которые могут замедлить вычисления.
Я не прошу альтернативного решения, придумать, что не сложно.
Мне просто интересно, является ли это ожидаемым результатом или проблемой с пандами или с обломками.