我有几列的数据框。其中之一是df['col1']
由字母,特殊字符(。或_)和数字组成的字符串值。我想创建一个新的列,该列返回索引+ 1或第一个数字或字母的位置。
我知道这行不通,但是类似:
df['new_col'] = df['col1'].apply(lambda x: re.search(r'\d', str(x))).str.startswith()
以便
col1 = abc12 returns 4,
33zxy returns 1,
hi_world2 returns 9
依此类推(如果是第一个数字的位置)。
我也尝试了find,next和filter,但是它们没有用。
df['new_col'] = df['col1'].str.find(next(filter(str.isalpha, df['col1']))) + 1
任何帮助,将不胜感激!
您可以使用re.search
import re
df['col1'].apply(lambda x: re.search('\d+', x).start()) + 1
你得到
0 4
1 1
2 9
编辑:如果没有匹配项,则re.search()。start()将引发属性错误。这需要加以处理。由于熊猫将NaN解释为浮点数,因此生成的头寸将为浮点型
df = pd.DataFrame({'col1':['abc12', '33zxy', 'hi_world2','abc']})
df['col1'].apply(lambda x: re.search('\d+', x).start() if re.search('\d+', x) else re.search('\d+', x)) + 1
0 4.0
1 1.0
2 9.0
3 NaN
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句