我有一个dataframe(~100万行),它有一个列('product'),其中包含诸如'none'、'q1'、'q123'或'q12_A123'之类的字符串。
我想提取字母“q”后面的数字,并将其输入到另一列(“amountpaid”)中,使其看起来如下所示:
'Product' 'AmountPaid'
none 0
q1 1
q123 123
q12_a123 12
到目前为止,我已经:
for i in range(0,1000000):
if 'q' not in df.loc[i,'Product']:
df.loc[i,'AmountPaid']=0
else:
# set 'AmountPaid' to the number following 'q'
问题:
如何提取紧跟在字母“q”后面的数字,但不一定是其后的所有数字?例如,从“q12_a123”中提取12。
大多数“amountpaid”项将设置为0。有没有比上面的for循环和if/else语句更有效的方法?
最佳答案
你在寻找str.extract
并在角色'q'
后面寻找。
df['AmountPaid'] = df.Product.str.extract(
r'(?<=q)(\d+)', expand=False
).fillna(0).astype(int)
df
Product AmountPaid
0 none 0
1 q1 1
2 q123 123
3 q12_a123 12