Элементы подстроки в Пандах

1

Для python DataFrame мне нужно выбрать конкретные символы для каждого элемента в столбце

df['y'] = df['x'].apply(lambda x: x[1:4])

но получение этой ошибки

TypeError: объект "NoneType" не подлежит расшифровке

Теги:
pandas

2 ответа

1
Лучший ответ

Я считаю, что нужно indexing with str которые обрабатывают NaN и None:

df = pd.DataFrame({ 'x' : ['abcdef','av', 'a', None, np.nan]})
df['y'] = df['x'].str[1:4]
print (df)

        x     y
0  abcdef   bcd
1      av     v
2       a      
3    None  None
4     NaN   NaN

РЕДАКТИРОВАТЬ:

Я предлагаю сначала индексирование по str[1:], затем разбивается на sparator, а затем str[0] для первых разбитых списков seelct:

df = pd.DataFrame({ 'x' : ['abc|etf','av|ee', 'ayty|s', None, np.nan]})

df['y'] = df['x'].str[1:].str.split('|').str[0]
print (df)

         x     y
0  abc|etf    bc
1    av|ee     v
2   ayty|s   yty
3     None  None
4      NaN   NaN

РЕДАКТИРОВАТЬ:

df = pd.DataFrame({ 'x' : ['abc|Ttf','av|Re', 'ayty|s','ayty|','ayty', None, np.nan]})

def f(x):
    #find position
    pos = x.find('|')
    #if no match return same value
    if pos == -1:
        return x
    #else procees code - split
    else:
        return x[:pos+2]

mask = df['x'].notnull()
df.loc[mask, 'y'] = df.loc[mask, 'x'].apply(f)
print (df)

         x       y
0  abc|Ttf   abc|T
1    av|Re    av|R
2   ayty|s  ayty|s
3    ayty|   ayty|
4     ayty    ayty
5     None     NaN
6      NaN     NaN
  • 2
    @jezreal - это str[] на практике так же, как str.slice как сахарный синтаксис или они разные?
  • 1
    @RafaelC - хм, сложный вопрос для меня. Понятия не имею, но я пытаюсь найти что-то актуальное.
Показать ещё 7 комментариев
0

Можно также использовать str.slice

>>> df.x.str.slice(1,4)

например

df.x

0    abcdef
1    abcdef
2    abcdef
3      None
4    abcdef

df.a.str.slice(1,4)

0     bcd
1     bcd
2     bcd
3    None
4     bcd

Ещё вопросы

Сообщество Overcoder
Наверх
Меню