我试图了解为什么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可以解析百分比,但提取不能。这让我有点疯狂,因为它似乎应该是直截了当的。
答案 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%