我有一个如下所示的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
请告知。谢谢!
答案 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