2016-05-04 2 views
2

Я хочу разделить строку в нескольких столбцах. Например, я хотел бы выбрать некоторую информацию из col2, col3 и col5 в нижней части фреймворка (но для этого у меня больше ста столбцов).Разделить несколько столбцов с помощью pandas

d = pd.DataFrame({ 
        'col1' : ['USA', 'AGN'], 
        'col2' : ['0|0:0.014:0.986,0.013,0', '1|0:0.02:1.936,0.023,1'], 
        'col3' : ['1|0:0.024:0.9,0.01345,2', '0|2:0.213:0.92,0.1,2'], 
        'col4' : ['done', 'done'], 
        'col5' : ['2|0:0.02:1.936,0.023,1', '1|0:0.024:0.9,0.01345,2'] 
        }) 

    col1      col2      col3 col4 ..... 
0 USA 0|0:0.014:0.986,0.013,0 1|0:0.024:0.9,0.01345,2 done ..... 
1 AGN 1|0:0.02:1.936,0.023,1  0|2:0.213:0.92,0.1,2 done ..... 

мне нужно только первые 3 балла из этой длинной строки. Тогда я ожидаю, что смогу увидеть из моего результата, такого как ниже.

col1 col2 col3 col4 col5 .... 
USA 0|0 1|0 done 2|0 .... 
AGN 1|0 0|2 done 1|0 .... 

Подскажите пожалуйста?

ответ

2

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

In [254]: d.replace(r':.*', '', regex=True) 
Out[254]: 
    col1 col2 col3 col4 col5 
0 USA 0|0 1|0 done 2|0 
1 AGN 1|0 0|2 done 1|0 
1

Чтобы получить первые три символы строки:

>>> d.col2.str[:3] 
0 0|0 
1 1|0 
Name: col2, dtype: object 

Чтобы разделить на «:» и принять первые пункт:

>>> d.col2.str.split(':', expand=True)[0] 
0 0|0 
1 1|0 
Name: 0, dtype: object 

чтобы применить его к группе столбцов:

cols = ['col2', 'col3', 'col5'] 
d.loc[:, cols] = d.loc[:, cols].apply(lambda s: s.str[:3]) 

>>> d 
    col1 col2 col3 col4 col5 
0 USA 0|0 1|0 done 2|0 
1 AGN 1|0 0|2 done 1|0 
+0

Спасибо за ваше столь четкое объяснение. :) – Sakura

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