Панды - разделить текст со значениями в скобках на несколько столбцов - PullRequest
3 голосов
/ 21 сентября 2019

У меня есть столбец данных со следующими значениями:

HexNAc(6)Hex(7)Fuc(1)NeuAc(3)
HexNAc(6)Hex(7)Fuc(1)NeuAc(3)
HexNAc(5)Hex(4)NeuAc(1)
HexNAc(6)Hex(7)

Я хочу разбить эту информацию на несколько столбцов:

HexNAc Hex Fuc NeuAc
6      7   1   3
6      7   1   3
5      4   0   1
6      7   0   0

Каков наилучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 21 сентября 2019

Чек

pd.DataFrame(s.str.findall('\w+').map(lambda x : dict(zip(x[::2], x[1::2]))).tolist())
Out[207]: 
   Fuc Hex HexNAc NeuAc
0    1   7      6     3
1    1   7      6     3
2  NaN   4      5     1
3  NaN   7      6   NaN
4 голосов
/ 21 сентября 2019

Может быть сделано с комбинацией разбиений строк и explode (pandas версия> = 0,25), затем pivot.Остальное очищает некоторые столбцы и заполняет пропущенные значения.

import pandas as pd
s = pd.Series(['HexNAc(6)Hex(7)Fuc(1)NeuAc(3)', 'HexNAc(6)Hex(7)Fuc(1)NeuAc(3)',
               'HexNAc(5)Hex(4)NeuAc(1)', 'HexNAc(6)Hex(7)'])

(pd.DataFrame(s.str.split(')').explode().str.split('\(', expand=True))
   .pivot(columns=0, values=1)
   .rename_axis(None, axis=1)
   .dropna(how='all', axis=1)
   .fillna(0, downcast='infer'))

  Fuc Hex HexNAc NeuAc
0   1   7      6     3
1   1   7      6     3
2   0   4      5     1
3   0   7      6     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...