Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫中str.extract与str.count正则表达式的用法_Python_Pandas - Fatal编程技术网

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。