Python Pandas.series str extract无法获取一位数的字符串

Python Pandas.series str extract无法获取一位数的字符串,python,regex,pandas,Python,Regex,Pandas,我需要从一列字符串中提取数字。但是str.extract(\d)不适用于只包含数字的字符串 df['extract'] = df['original'].str.extract('(\d+)') 请将dataframe作为字典查看: {'original': {0: 'NO RATING', 1: 4, 2: '3-', 3: 3, 4: '4-', 5: '2-', 6: '2+', 7: '4+', 8: '5-', 9: 5, 10: '5+',

我需要从一列字符串中提取数字。但是str.extract(\d)不适用于只包含数字的字符串

df['extract'] = df['original'].str.extract('(\d+)')
请将dataframe作为字典查看:

{'original': {0: 'NO RATING',
  1: 4,
  2: '3-',
  3: 3,
  4: '4-',
  5: '2-',
  6: '2+',
  7: '4+',
  8: '5-',
  9: 5,
  10: '5+',
  11: 2,
  12: '3+',
  13: '6+',
  14: '6-',
  15: 6,
  16: 7},
 'extract': {0: nan,
  1: nan,
  2: '3',
  3: nan,
  4: '4',
  5: '2',
  6: '2',
  7: '4',
  8: '5',
  9: nan,
  10: '5',
  11: nan,
  12: '3',
  13: '6',
  14: '6',
  15: nan,
  16: nan}}
df是一个具有2列的pd数据帧,df['orginal']包含2+、2-、2、3-、3+、无评级等值

代码工作生成新的列df['extract'],这对于值2-(给出2)、3+(给出3)、无评级(给出NaN)是正确的。但是对于2(给出NaN,但我期望2)和3(给出NaN,但我期望3)这样的值是错误的


问题是有些值是整数,有些是字符串。虽然str.extract没有得到错误,但如果它是整数,则它没有提取正确的值。您可以使用lambda和findall函数来处理这种情况。然后还添加一个可选运算符(+),以在值大于9时获得更多数字

df['extract'] = df['original'].map(lambda x: re.findall('(\d+)', str(x))) \
                           .map(lambda i: i[0] if len(i)>0 else None)
结果:

   original extract
0   5         5
1   13+      13

在使用
extract

df['extract'] = df['original'].astype(str).str.extract('(\d+)')

你能把你的
df.贴到_dict()
上吗
df
是小的
df
吗?在我的例子中,你的代码工作得很好,你需要把你使用的正则表达式从
(\d)
改为
(\d+
,以处理多于一位的数字。当然,负面符号将被忽略。编辑原始帖子比发表评论更好。原创帖子总是可以编辑的,评论只有5条minutes@Anwarvic,你能告诉我你的结果吗?非常感谢。在我发布问题之前,我确实尝试过并搜索过。如果你能告诉我这是怎么回事,那就太好了。但请不要只是说你的代码在我的情况下有效,然后投反对票。我问这个问题是因为我不明白str extract为什么会这样。如果您满意,请将其标记为正确答案。谢谢。你能不能也谈谈“无评级”的问题?这也让我非常感谢你!这很好用。它只是不允许选择2个答案。这很有效!!谢谢你,我知道它为什么不起作用了。我认为一个列只有一个数据类型,即字符串。。