pandas 从特定字符后的字符串中提取数字

tquggr8v  于 2023-09-29  发布在  其他
关注(0)|答案(2)|浏览(116)

我有一个 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'

问题:
1.如何提取紧跟着字母“q”的数字,但不一定是后面的所有数字?例如,从'q12_a123'中提取12。
1.大多数“AmountPaid”条目将设置为0。有没有比上面的for循环和if/else语句更有效的方法?

iyfamqjs

iyfamqjs1#

您正在查找在字符'q'上具有lookbehind的str.extract

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
jchrr9hc

jchrr9hc2#

作为对cs95's answer的补充,由于str.extract只捕获捕获组内的内容,因此不需要向后看。
可以直接使用q(\d+)

df['AmountPaid'] = (df['Product'].str.extract(r'q(\d+)', expand=False)
                                 .fillna(0).astype(int)
                    )

输出量:

Product AmountPaid
0      none          0
1        q1          1
2      q123        123
3  q12_a123         12

这不仅在语法方面更短,而且更高效:

相关问题