四时宝库

程序员的知识宝库

数据处理神器:探索NumPy、Pandas和字典在数据转换中的奥秘

hello 大家好,今天为大家推荐几个可以像字典一样处理数据的工具

大家知道python字典dict的特点是key 是唯一的,所以可变数据类型如list,dict是不能成为字典的key的。另外如果存储的数据中有相同值得key, 会直接更新字典的value值。

基于以上,本人在写代码的时候遇到了个python 字典无法解决的问题,key的值不唯一,但又想让指定的数据当key来提高搜索效率。是不是感觉很难,如果不用数据库协助方法实现起来有点天方夜谭。下面开始:

比如现在有个表格,里面存放的是多个集群的信息,包含集群编号,deploy名称,等等信息。现在我想读取整个表格,并且根据集群名称去获取表格中的每个集群以及对应的deployment名称

方法一:通过读取表格,并将数据赋值给字典,通过get字典的方式获取指定集群的deployment的信息

代码可以这样写

import pandas as pd  #导入模块
filePd = pd.read_excel('deploy.xlsx')  #导入表格

for index,row in filePd.iterrows():
    deployNamespace = {} #设置空字典,存放集群名称:deploy名称
    for index, row in filePd.iterrows():
        cluster = filePd['集群编号'][index] #根据表格索引获取每行的指定单元格的数据
        deployment = filePd['deploy名称'][index]#获取指定的deployment名称
        deployNamespace[cluster] = (cluster)

print(deployNamespace.get('集群名'))

好像代码可以哈,但是大家知道,k8s集群中每个集群中会有很多个deployment控制器,假如表格中有多个deployment控制器在同一个集群 ,集群编号就会有重复的情况,那么就不能通过get集群编号的方式获取对应的deployment控制器名称。因为在读取信息的时候字典遇到相同的key值会覆盖掉上一个的赋值。


打脸来的很快,其实用字典也可以实现,以集群名展示他下面所有的deployment名称,代码如下:

方法二:

import pandas as pd #导入模块
filePd = pd.read_excel('deploy.xlsx') #导入表格

for index,row in filePd.iterrows():
    deployNamespace = {} #设置空字典,存放集群名称:deploy名称
    for index, row in filePd.iterrows():
        cluster = filePd['集群编号'][index]
        deployment = filePd['deploy名称'][index] #获取指定的deployment名称
        if deployNamespace.get(cluster): #如果字典中存在,那么直接追加
            deployNamespace[cluster].append(deployment)
        else: #如果字典中不存在集群名称,那么直接复制
            deployNamespace[cluster] = [deployment]


print(deployNamespace.get('集群名'))


方法三:好了,文章的高潮来了,下面使用numpy模块实现这个功能,

import pandas as pd
import numpy as np

filePd = pd.read_excel('deploy.xlsx')

# 创建一个空的结构化数组
data = np.array([], dtype=[('集群编号', 'U20'), ('deployment名称', 'U20')])

# 要添加的数据列表

for index,row in filePd.iterrows():
    cluster = filePd['集群编号'][index]
    deploy = filePd['deployment名称'][index]
    data = np.append(data, np.array((cluster,deploy), dtype=data.dtype))


print(data[data['name']=='指定集群编号']['deployment名称']) #也可以输出指定集群下所有deploy名称

方法四:可以直接使用pandas读取数据的时候完成这样这样的操作,代码如下:

import pandas as pd
import numpy as np

filePd = pd.read_excel('deploy.xlsx')

# 假设您想根据列'集群编号'的值为'x'来获取对应的列'deployment名称'的值
filtered_data = filePd.loc[filePd['集群编号'] == '指定对应的集群名', 'deployment名称']
print(filtered_data.tolist())


今天的内容到此结束,欢迎大家点赞,关注,收藏,咱们青山不改,绿水长流,下一篇文章继续分析

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接