У меня есть столбец в Pandas массиве данных, состоящем из списков переменной длины, и я пытаюсь найти эффективный способ извлечения элементов, зависящих от длины списка. Рассмотрим этот минимальный воспроизводимый пример:
t = pd.DataFrame({'a':[['1234','abc','444'],
['5678'],
['2468','def']]})
Скажем, я хочу извлечь 2-й элемент (при необходимости) в новый столбец и использовать NaN в противном случае. Я смог получить его очень неэффективным способом:
_ = []
for index,row in t.iterrows():
if (len(row['a']) > 1):
_.append(row['a'][1])
else:
_.append(np.nan)
t['element_two'] = _
И я попытался использовать np.where()
, но я неправильно указываю аргумент 'if':
np.where(t['a'].str.len() > 1, lambda x: x['a'][1], np.nan)
Исправления и советы для других решений будет принята с благодарностью! Я прихожу из R, где я воспринимаю векторизацию как должное.
Я на pandas 0.25.3 и numpy 1.18.1.