2015-03-16 2 views
1

У меня есть строковый столбец (Time) в фрейме данных, подобном этому. Я хочу поставить знак подчеркивания между цифрами и удалить месяцы.манипуляция строкой столбца в Data Frame в pandas

Time 
2- 3 months   
1- 2 months   
10-11 months   
4- 5 months 
Desired output: 
2_3   
1_2   
10_11   
4_5 

Вот что я пытаюсь, но не работает.

def func(string): 
    a_new_string =string.replace('- ','_') 
    a_new_string1 =a_new_string.replace('-','_') 
    a_new_string2= a_new_string1.rstrip(' months') 
    return a_new_string2 

И применение функции к кадру данных.

df['Time'].apply(func) 
+0

Вы возвращаете результат? 'df ['Time'] = df ['Time']. apply (func)'? – EdChum

+0

Да. Я хочу применить эту функцию в столбце «Время» кадра данных. – Alph

ответ

2

Одним из вариантов является использование 3 strreplace звонков:

In [18]: 

df['Time'] = df['Time'].str.replace('- ', '_') 
df['Time'] = df['Time'].str.replace('-', '_') 
df['Time'] = df['Time'].str.replace(' months', '') 
df 
Out[18]: 
    Time 
0 2_3 
1 1_2 
2 10_11 
3 4_5 

Я думаю, ваша проблема может быть, что вы не назначая результат вашей apply спины:

In [21]: 

def func(string): 
    a_new_string =string.replace('- ','_') 
    a_new_string1 =a_new_string.replace('-','_') 
    a_new_string2= a_new_string1.rstrip(' months') 
    return a_new_string2 

df['Time'] = df['Time'].apply(func) 
df 
Out[21]: 
    Time 
0 2_3 
1 1_2 
2 10_11 
3 4_5 

Вы может также сделать это одним вкладышем:

In [25]: 

def func(string): 
    return string.replace('- ','_').replace('-','_').rstrip(' months') 

df['Time'] = df['Time'].apply(func) 
df 
Out[25]: 
    Time 
0 2_3 
1 1_2 
2 10_11 
3 4_5 
+0

Я пробовал это, но мне нужно использовать функцию. Я пытался написать то же самое в функции. – Alph

+0

Отлично. Я знал, где моя ошибка. – Alph

Смежные вопросы