求助:从DataFrame的Entity列提取引号内的目标数字
嗨,我来帮你搞定这个提取需求!针对你提到的两种场景,我用Python+pandas整理了具体的实现方法,直接就能用:
一、提取最后一对引号之间的数字
从你的示例数据来看,我们需要捕获每一行里最后一个双引号之后的数字(包括负数)。这里用正则表达式结合pandas的str.extract就能轻松实现:
首先先构造你的示例DataFrame(方便测试):
import pandas as pd data = { 'Entity': [ 'Received \' "bsm": ["entityID":"196609" "entityID":"-1140719616" "entityID":"196609" "entityID":"196609" "entityID":"196609" "entityID":"10000227', 'Received \' "bsm": ["entityID":"196609" "entityID":"-1140719616' ] } df = pd.DataFrame(data)
然后执行提取操作:
# 提取最后一对引号中的数字(支持负数) df['last_entity_id'] = df['Entity'].str.extract(r'.*"(-?\d+)')
正则说明:
.*":贪婪匹配任意字符,直到遇到最后一个双引号(这一步是关键,确保我们定位到最后一组引号)(-?\d+):捕获引号后的数字,-?表示允许负数,\d+匹配1个或多个数字
执行后你会得到新列last_entity_id,里面就是每行最后一个引号内的数字。
二、提取所有数字
如果需要把每行里所有的数字(包括负数)都提取出来,可以用str.findall方法,它会返回一个包含所有匹配结果的列表:
# 提取所有数字,结果以列表形式存储 df['all_entity_ids'] = df['Entity'].str.findall(r'-?\d+')
如果想把每个数字单独拆成一行(方便后续统计或分析),可以用explode展开:
# 展开列表为单独行 df_exploded = df.explode('all_entity_ids', ignore_index=True)
验证结果
你可以打印输出看看效果:
print("提取最后一个ID的结果:") print(df[['Entity', 'last_entity_id']]) print("\n提取所有ID的列表结果:") print(df[['Entity', 'all_entity_ids']]) print("\n展开后的单行ID:") print(df_exploded)
如果你的数据里有特殊情况(比如数字带小数点、引号内有非数字字符),可以微调正则:比如要匹配带小数的数字,就把\d+改成\d+\.?\d*即可。
内容的提问来源于stack exchange,提问作者Nik
相关产品推荐
相关产品推荐

