首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >拉出列中包含刺的部分,并创建可根据公共键提取值的字典。

拉出列中包含刺的部分,并创建可根据公共键提取值的字典。
EN

Stack Overflow用户
提问于 2021-08-20 09:05:57
回答 3查看 63关注 0票数 2

我有一个df,它包含包含多个数据的字符串,我希望解析这些数据并将其存储为字典。我想将PubMed Identifier存储为pmid键,以下数字存储为其值,Embase存储为euid和以下数字,NCT存储为trialid和下面的数字(无空格),并忽略其上的数字或忽略PubMed Identifier/Embase而不跟踪/关联数字。

代码语言:javascript
运行
AI代码解释
复制
data = {"ORN": [1, 2, 3, 4],
        "EN": ["PubMed Identifier 27955689", "PubMed Identifier 8010359Embase  24208639", "PubMed Identifier 12237786Embase  35148801", "PubMed Identifier NCT02360007 12537613"]
        }

df = pd.DataFrame(data=data)

    ORN EN
0   1   PubMed Identifier 27955689
1   2   PubMed Identifier 8010359Embase 24208639
2   3   PubMed Identifier 12237786Embase 35148801
3   4   PubMed Identifier NCT02360007 12537613


desired_df

    ORN EN
0   1   {"pmid": 27955689}
1   2   {"pmid":  8010359, "euid": 24208639}
2   3   {"pmid": 12237786, "euid": 35148801}
3   4   {"trialid": 02360007}

我不明白我该怎么做wrt最好的方法。我的想法是用.split(expand=True)将字符串拆分成列,然后对列进行重新排序,然后使用to_dict()进行合并,这是我能想到的最好的方法,但任何更好的建议都会很好。字符串操作是我需要改进的东西。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-20 09:47:49

创建映射字典,然后构造正则表达式模式,以查找每一行中的所有键值对,然后将键值对重新映射为dict。

代码语言:javascript
运行
AI代码解释
复制
d = {'PubMed Identifier': 'pmid',
     'Embase': 'emid', 'NCT': 'trialid'}

pat = fr'({"|".join(d)})\s*(\d+)'
df['EN'].str.findall(pat).map(lambda l: {d[k]: v for k, v in l})

代码语言:javascript
运行
AI代码解释
复制
0                        {'pmid': '27955689'}
1     {'pmid': '8010359', 'emid': '24208639'}
2    {'pmid': '12237786', 'emid': '35148801'}
3                     {'trialid': '02360007'}
Name: EN, dtype: object
票数 1
EN

Stack Overflow用户

发布于 2021-08-20 10:24:36

.str.extract()提取数据

.apply() + dropna() + to_dict()构建dict

使用.str.extract()提取数据的

代码语言:javascript
运行
AI代码解释
复制
df_extract = df['EN'].str.extract(r'PubMed Identifier\s*(?:(?P<pmid>\d+)(?:Embase\s*(?P<euid>\d+))?)|NCT(?P<trialid>\d+)')

或者,使用:

代码语言:javascript
运行
AI代码解释
复制
df_extract = df['EN'].str.extract(r'PubMed Identifier\s*(?P<pmid>\d+)?\s*(?:Embase\s*(?P<euid>\d+))?(?:NCT\s*(?P<trialid>\d+))?')

结果:

代码语言:javascript
运行
AI代码解释
复制
print(df_extract)


       pmid      euid   trialid
0  27955689       NaN       NaN
1   8010359  24208639       NaN
2  12237786  35148801       NaN
3       NaN       NaN  02360007

to_dict() + .apply() + dropna()构建dict

代码语言:javascript
运行
AI代码解释
复制
df_extract.apply(lambda x: x.dropna().to_dict(), axis=1)

结果:

代码语言:javascript
运行
AI代码解释
复制
0                        {'pmid': '27955689'}
1     {'pmid': '8010359', 'euid': '24208639'}
2    {'pmid': '12237786', 'euid': '35148801'}
3                     {'trialid': '02360007'}
dtype: object
票数 2
EN

Stack Overflow用户

发布于 2021-08-20 09:24:38

您可以使用str.extract

代码语言:javascript
运行
AI代码解释
复制
df['EN'].str.extract('PubMed Identifier +(?P<pmid>\d+)|NCT(?P<trialid>\d+)|Embase +(?P<euid>[^ ]+)')

产出:

代码语言:javascript
运行
AI代码解释
复制
       pmid   trialid euid
0  27955689       NaN  NaN
1   8010359       NaN  NaN
2  12237786       NaN  NaN
3       NaN  02360007  NaN

若要拥有as dict,请添加.T.to_dict()

代码语言:javascript
运行
AI代码解释
复制
df['EN'].str.extract('(?=PubMed Identifier\s+(?P<pmid>[^ ]+\d+))?|(?=Embase\s+(?P<euid>\d+))?').T.to_dict()

产出:

代码语言:javascript
运行
AI代码解释
复制
{0: {'pmid': '27955689', 'euid': nan},
 1: {'pmid': '8010359', 'euid': nan},
 2: {'pmid': '12237786', 'euid': nan},
 3: {'pmid': 'NCT02360007', 'euid': nan}}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68865787

复制
相关文章
python找到多个字典中的公共键
python找到多个字典中的公共键 生成字典 from random import randint,sample s = 'abcdefg' s1 = {x:randint(1,4) for x in sample(s,randint(3,6))} s2 = {x:randint(1,4) for x in sample(s,randint(3,6))} s3 = {x:randint(1,4) for x in sample(s,randint(3,6))} 方案1:循环判断 res = [] fo
听城
2018/04/27
4.2K0
【python 3.6】笨办法取出列表中的字典的value
#python 3.6 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'BH8ANK' x = {'RegionSet': [{'Region': 'ap-beijing', 'RegionName': '\xe5\x8d\x8e\xe5\x8c\x97\xe5\x9c\xb0\xe5\x8c\xba(\xe5\x8c\x97\xe4\xba\xac)', 'Region
BH8ANK
2021/01/28
3.1K0
python3-字典中包含字典
# Auther: Aaron Fan #定义字典及内容 av_catalog = {    "欧美":{        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],        "x-art.com":["质量很高,真的
py3study
2020/01/03
1.6K0
创建一键对多值的字典
一键对多值的字典 下面提供两种方法,推荐第二种方法,更加符合Python风格。 # 一键对多个值演示方法1: d = {} lst = [(1,'apple'),(2,'orange'),(1,'compute')] for k,v in lst: if k not in d: d[k]=[] d[k].append(v) print(d) # {1: ['apple', 'compute'], 2: ['orange']} # 方法2,建议使用defaultdict f
double
2019/12/12
1.9K0
在HTML页面中引入公共的部分的代码
在做前端网页的时候,会涉及到很多界面,有的时候,这些界面都会有重复的代码,比如侧边栏菜单的重复代码,头部导航的 重复代码,底部的重复代码,这个时候,为了使每个页面的代码看起来简洁明了,我们需要把这些重复的代码放到公共的页面里面,在具体页面只需引用即可。
王小婷
2019/05/17
5.4K0
【Python】字典 dict ① ( 字典定义 | 根据键获取字典中的值 | 定义嵌套字典 )
字典 在 大括号 {} 中定义 , 键 和 值 之间使用 冒号 : 标识 , 键值对 之间 使用逗号 , 隔开 ;
韩曙亮
2023/10/11
6390
文件中字的统计及创建字典
在NLP中,很多都要对字或者单词进行预处理,或者是要创建词典; 例如:tf1: nn实现评论分类 例如:15. tf13: 简单聊天机器人 上面两篇都是对单词的操作,下面提供一份python3下对汉字的操作; 代码中有注释: import sys fr = open('xyj.txt', 'r', encoding='UTF-8') characters = [] stat = {} for line in fr: # 去掉每一行两边的空白 line = line.strip()
MachineLP
2022/05/09
8340
Python字典提取_python字典键对应的值
注意如果存在相同键值,比如说: a={'a':1,'b':2,'c':3,'aa':12} b= {'aa':11,'bb':22,'cc':33} 那么方法一\二\三得到结果为
全栈程序员站长
2022/11/03
3.8K0
获取两个list中相互不包含的部分
代码如下:提供了几种方法(自个写的) import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; class Scratch { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.a
阿超
2022/08/21
1.6K0
获取两个list中相互不包含的部分
[WPF 自定义控件]创建包含CheckBox的ListBoxItem
不过它用起来不怎么样,与其这样还不如参考UWP的ListView实现,而且动画效果也很好看:
dino.c
2020/02/21
3K0
[WPF 自定义控件]创建包含CheckBox的ListBoxItem
“提需求的”与“拉SQL的”如何有效沟通
这个题目改了又改,最终还是感觉这样写更具有可读性,毕竟一篇文章最终还是以能够读懂为初衷的,现阶段,各个公司里科技开发、数据编制成为必不可少的岗位,技术和业务的沟通也日益频繁。
Python数据科学
2019/09/19
5240
“提需求的”与“拉SQL的”如何有效沟通
创建公共云的内部体验
如今,云计算已经彻底改变了我们构建IT企业内部系统的方式。事实上,企业的IT部门在云计算诞生以来,一直复制自己的数据中心内的云计算的力量。 麻烦的是,云计算系统的构建新的网络,这意味着他们可以从头开始,因此使用基于云计算的资源更具创新性,并可以使用最现代的技术和方法。很多企业并不具备这样的奢侈品。几十年来,企业硬件和软件采购的成熟度存在着不同的水平,这些架构必须支持关键任务系统的操作。 不过,事情正在发生变化。目前新技术可以为企业提供公有云的经验,其中包括: ·使用弹性计算资源,比如存储和计算。 ·计量资源
静一
2018/03/26
1.4K0
在 Angular 应用中创建包含组件
包含组件就是指可以包含其它组件的组件, 以 Bootstrap 的卡片 (Card) 为例, 它包含页眉 (header) 、 主体 (body) 和 页脚 (footer) , 如下图所示:
beginor
2020/08/07
4.9K0
在 Angular 应用中创建包含组件
接口中可以包含的组成部分
    1.接口中的抽象方法,修饰符如果自己写必须是:public abstract
黑泽君
2018/10/11
2.6K0
python基础之字典的创建
  在实际开发过程中,我们会遇到需要将相关数据关联起来的情况,例如,处理学生的学号、姓名、年龄、成绩等信息。另外,还会遇到需要将一些能够确定的不同对象看成一个整体的情况。Python提供了字典和集合这两种数据结构来解决上述问题。这里介绍一下python字典的创建相关知识。
jiankang666
2022/06/22
1K0
python基础之字典的创建
使用 Python 从字典键中删除空格
Python是广泛用于数据分析,Web开发,AI的平台,并在自动化的帮助下执行许多不同类型的任务。对我们来说,了解 python 的不同功能很重要。在本文中,我们将了解字典功能以及如何使用 python 删除键之间的空格。此功能主要用于根据需要存储和检索数据,但有时字典的键值之间可能存在空格。当用户希望访问数据时,甚至在要编辑数据的情况下,这会导致错误。
很酷的站长
2023/08/11
6100
使用 Python 从字典键中删除空格
分享一下最近使用python字典取值用法的收获
上面的用法中,如果输入的key在字典中不存在的时候,就会报KeyError的错误:
小博测试成长之路
2023/02/24
5400
分享一下最近使用python字典取值用法的收获
Python学习记录06-字典中的键映射多个值
如果想一个key映射多个value, 我们就需要让value也是一个容器,可以是列表,也可以集合。看具体的使用场景。列表的特性是可以保持顺序,集合的特性是可以去重。 可以用以下的方式来创建一个映射多个value 的字典
huolong
2023/09/07
6700
tensorflow中取值
本文主要介绍了在 TensorFlow 中如何取出张量(Tensor)的返回值。首先介绍了两种方法:使用 tf.cast() 和 tf.to_int32(),但它们都返回了 Tensor 对象。然后,文章介绍了如何将 Tensor 对象转换为变量类型,通过使用 tf.Variable 和 tf.Session()。最后,文章通过示例代码展示了如何将变量类型转换为 Tensor 对象。
用户1148830
2018/01/04
2.1K0
点击加载更多

相似问题

用包含"-“键的键从对象字典中获取值

11

从多个字典中的公共键中提取值

313

如何从包含多个键的字典中抓取值?

21

在字典- Python中搜索键并获取值

21

列出的字典中包含部分查询的搜索键

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档