代码在spyder(python 3,7)中有效,但在Jupyter Notebook中不起作用

问题描述 投票:0回答:1

以下代码在spyder中有效

import re

price_num = []
for row in df['price']:
    price_no_nonnum = re.sub('[^0-9]','', row) # this code line works in spyder
    price_num.append(int(price_no_nonnum))

在Jupyter笔记本中,出现错误

import re

price_num = []
for row in df['price']:
    price_no_nonnum = re.sub('[^0-9]','', row) # this code line gives an error in  jupyter
    price_num.append(int(price_no_nonnum))

以下错误来自Jupyter

TypeErrorTraceback (most recent call last)
<ipython-input-13-b3f4fcbe9d89> in <module>()
      3 price_num = []
      4 for row in autos['price']:
----> 5    price_no_nonnum = re.sub("[^0-9]","", row)
      6    price_num.append(int(price_no_nonnum))
      7 

/dataquest/system/env/python3/lib/python3.4/re.py in sub(pattern, repl, string, count, flags)
    177     a callable, it's passed the match object and must return
    178     a replacement string to be used."""
--> 179     return _compile(pattern, flags).sub(repl, string, count)
    180 
    181 def subn(pattern, repl, string, count=0, flags=0):

TypeError: expected string or buffer
python jupyter-notebook
1个回答
0
投票

我的猜测是row不是字符串,而是某些特定于Pandas的数据类型。您可以尝试这样做,避免完全使用正则表达式:

price_num = []
for row in df['price']:
    try:
        price = int(row)
    except ValueError:
        pass
    else:
        price_no_nonnum = ''.join(c for c in str(row) if c.isdigit())
        price = int(price_no_nonnum)
    price_num.append(price)
© www.soinside.com 2019 - 2024. All rights reserved.