pandas中的str.extract vs str.count正则表达式用法

时间:2014-05-13 04:40:02

标签: python pandas

我试图了解为什么str.extract"([\d+%])"返回NaN,而str.count"([\d+%])"在解析数据框的列中的文本时返回正确的答案。

例如,

df = pd.DataFrame({'Subject':['3 hrs only! 35% off', 'Secret Savings!', 'Sale: 40% off']})
pattern = re.compile(r"(\d+%)")
df['Discount'] = df['Subject'].str.count(pattern)

...使用" 1"产生折扣列如你所料,在第1行和第3行。然而,

df['Discount'] = df['Subject'].str.extract(pattern)

...而是返回NaNs。我无法理解为什么count可以解析百分比,但提取不能。这让我有点疯狂,因为它似乎应该是直截了当的。

1 个答案:

答案 0 :(得分:0)

bug在后续的Pandas版本中已修复。

现在,对于Pandas 0.24.2,您可以使用

>>> df.index=['a', 'b', 'c']
>>> df
               Subject Discount
a  3 hrs only! 35% off      35%
b      Secret Savings!      NaN
c        Sale: 40% off      40%
>>> df['Subject'].str.extract(pattern)
     0
a  35%
b  NaN
c  40%