如何修剪熊猫列中的字符串和字符串列表

时间:2019-10-22 18:18:11

标签: python pandas

我有一个如下所示的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 个答案:

答案 0 :(得分:1)

使用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

我可以说这不是一个好的设计。避免在同一列中完全包含列表和数字。

答案 1 :(得分:1)

具有自定义功能(基于正则表达式替换):

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