生信Log27|一文总结python不同结构数据的增删查改
2022-09-15 本文已影响0人
小周的万用胶囊
用pandas已经有一段时间了,从初学者到现在发现处理的数据类型除了dataframe以外,一般是字符,列表,字典(json的文件格式)和Series,dataframe在这里总结一下自己常用的操作供以后查阅。
1、字典
- 查看字典的key和values
#查看key
dict.keys() #打印出全部的keys
#查看value
dict.values()
#查看特定key对应的value
dict.get(key) #输出的是value
#遍历所有的key和对应的value
for k,v in dict.items():
print(k,v)
-
增加字典的key
查看了很多资料发现很多都是需要加上值
增加key的方法
dict['new_key'] = 'new_value'
#后续如果想要再读进文件相同key中的value最好还是用update,字典会自动舍弃掉重复值,保持key的unique特性,使用list的append有很多重复值
dict.update({'new_key':'new_value'}) #注意花括号
#两个字典合并
dict_1 |dict_2
2、列表List
#循环读取列表并编辑
list = [a, b, c, d]
list = [i + '@' for i in list]
#增加元素
list.append(new_element)
# 删除list中的元素
list.remove('element')
#插入元素
list.insert('element')
#其他的一些方法是根据索引index(元素所在的位置对列表中的元素进行修改)
list.pop(list[index]) #后面的元素会自动跟着补齐
3、复杂json(dict)的数据获取
有一些字典的数据里面包含了很多层嵌套,既有典中典,又有典中list,获取数据时难免,在这里介绍一个包叫jsonPath
建议使用Jsonpath的方法(类似Xpath),这个包通过pip install来下载,一些匹配的规则可以到官网上查询他们的教程。
!pip install jsonpath-ng
from jsonpath-ng import jsonpath, parse
#构建查询的字段
query = "$.node_name"
#根据查询的字段去匹配对应的内容,并获取对应内容所在的jsonPath
#其中value是值,match.full_path返回的是json的值
value = [match.value for match in parse(query).find(data)]
value_path = [str(match.full_path) for match in parse(query).find(data)]
#如果key对应的value是个list该怎么匹配
query = "$.node_name[*]" #这个'[*]'就是列表里面的内容,但这种匹配方法不能拿到
#匹配列表中的列表
query = "$.node_name[*][*]"#这两个[*]是有层级关系的后面一个[*]是前一个list的内容
#在只知道主key的情况下获取层级下的key,可以用类似正则表达式的写法(wildcard)"*"
query = "$.main_node.@"
#在不知道key名字的情况下获取key的名字和key的value
query = "$.@.*" #适用于这个key对应的是dict或者是string的值
query = "$.@[*]" #适用于key对应的值是list的情况
总结
- 查阅了一下资料发现python或者其他语言的里,使用的符号
[]
{}
同样也会影响数据的类型(最典型的当属pandas里面形成Series和dataframe),因此在调用这些的时候还需要多多留意
各位大佬勿喷,有能力的在留言区给各位指个路呗~
PS:目前集中在列表和字典的操作,一直会更新,就是比较慢(因为不太想写重复的东西)
参考
https://stackabuse.com/python-how-to-add-keys-to-dictionary/
https://devenum.com/append-value-to-an-existing-key-in-a-python-dictionary/
https://www.geeksforgeeks.org/python-convert-two-lists-into-a-dictionary/