下面有一个名为“New”的数据框列
df = pd.DataFrame({'New' : ['emerald shines bright(happy)(ABCED ID - 1234556)', 'honey in the bread(ABCED ID - 123467890)','http/ABCED/id/234555', 'healing strenght(AxYBD ID -1234556)', 'this is just a text'],
'UI': ['AOT', 'BOT', 'LOV', 'HAP', 'NON']})
现在,我想将各种ID(例如ABCED“、AxYBD和”http“中的ID)提取到另一列中。
但当我用
df['New_col'] = df['New'].str.extract(r'.*\((.*)\).*',expand=True)
我不能让它工作得很好,因为(ABCED ID - 1234556)
的整个括号都被返回了。更重要的是,http id 234555
没有被返回。
另外,有人可以清除第一列以删除括号中的ID,并使用类似以下内容:
New UI New_col
0 emerald shines bright(happy) AOT 1234556
1 honey in the bread BOT 123467890
2 http/ABCED/id/234555 LOV 234555
3 healing strenght HAP 1234556
4 this is just a text NON
4条答案
按热度按时间e5njpo681#
可能不是最优雅的答案,但是,我认为这是你想让它做的,
基于NEW标准。
下面是df现在的样子:
ui7jx7zq2#
您可以使用下列程式码来完成这项工作:
输出:
说明:
根据您的虚拟示例,您必须捕获两种模式:
http\/.*\/id\/(\d*)
例如
http/ABCED/id/234555
.*\(.*ID\s*-\s*(.*)\)
例如
emerald shines bright(ABCED ID - 1234556)
并使用or(
|
)运算符将它们组合到一个正则表达式中。因为有多个匹配项,所以我们可以使用lambda函数从匹配项中获取值。
sq1bmfud3#
您可以使用
输出量:
请参阅regex demo。* 详细数据 *:
.*
-任何零个或多个字符,尽可能多的换行符字符除外(?:\(\D*|http\S*/id/)
-(
+零个或多个非数字字符,或者http
后跟零个或多个非空格,然后是/id/
(\d+)
-组1:一个或多个数字。vcudknz34#
r'[i,d,I,D]{2}.*?(\d.*?)\D'
也许这个能帮上忙已编辑:
/?\(?(\w{5}) ?/?[i,d,I,D]{2}
看起来您需要的是字母,而不是数字