我需要从一列字符串中提取数字。但是str.extract(\ d)不适用于仅数字字符串。
df['extract'] = df['original'].str.extract('(\d+)')
请将该数据框视为字典:
{'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、3 +,无等级等值。
代码工作会生成新列df ['extract'],它对于值2-(给定2),3 +(给定3),NO RATING(给定NaN)是正确的。但这对于2(给出NaN,但我期望2)和3(给出NaN,但我期望3)这样的值是错误的。
答案 0 :(得分:0)
问题是某些值是整数,而有些则是字符串。尽管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
答案 1 :(得分:0)
在使用extract
df['extract'] = df['original'].astype(str).str.extract('(\d+)')