Python 熊猫中str.extract与str.count正则表达式的用法
我试图理解为什么Python 熊猫中str.extract与str.count正则表达式的用法,python,pandas,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
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行和第3行中生成一个折扣列,其中包含“1”。但是,
df['Discount'] = df['Subject'].str.extract(pattern)
…取而代之的是南斯。我不明白为什么count可以解析百分比,而extract不能。这让我有点疯狂,因为它看起来应该很简单。在随后的熊猫版本中修复了该问题
现在,使用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%
我想你的引号和括号顺序不对<代码>“(…)”vs
(“…)
你的小例子对我来说很好。但是,pandas 0.13.1的extract
中有一个bug(在master中已修复)。请参见此处:。如果将索引设置为初始默认值[0,1,2,…,N]之外的值,则extract
return NaNs。因此,如果我在你的例子中将索引改为['a','b','c',],我也会得到所有的NaN。