Как обрезать строки и список строк в столбце панд - PullRequest
1 голос
/ 22 октября 2019

У меня есть df, который выглядит так:

0              ['AU06_threshold_h', 'AU12_threshold_h']  
1                                     AU14_threshold_h   
2                                     AU26_threshold_h   
3                                                  NaN   
4                                     AU01_threshold_h   

Я хочу обрезать текст из каждой строки, а также нули, если первый символ равен 0. Он должен выглядеть следующим образом:

0              [6, 12]  
1                   14 
2                   26   
3                  NaN   
4                    1   

Пожалуйста, сообщите. Спасибо!

Ответы [ 2 ]

1 голос
/ 22 октября 2019

С пользовательской функцией (на основе подстановки регулярных выражений):

In [98]: pat = re.compile(r'[^\d]+')                                                                        

In [99]: def trim_non_num(s): 
    ...:     if isinstance(s, str): 
    ...:         return int(pat.sub('', s)) 
    ...:     elif isinstance(s, list): 
    ...:         return [int(pat.sub('', i)) for i in s] 
    ...:     return s 
    ...:                                                                                                    

In [100]: df['col'].apply(trim_non_num)                                                                     
Out[100]: 
0    [6, 12]
1         14
2         26
3        NaN
4          1
Name: col, dtype: object
1 голос
/ 22 октября 2019

Использование explode

df.col.explode().str.extract('(\d+)')[0]\
      .groupby(level=0).agg(lambda s: list(s) if len(s)>1 else s.iat[0])

0    [06, 12]
1          14
2          26
3         NaN
4          01
Name: 0, dtype: object

Могу я просто сказать, что это не очень хороший дизайн. Избегайте использования списков и номеров в одном столбце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...