首页 > 编程语言 >Python_pandas合并数据框操作和python的dict

Python_pandas合并数据框操作和python的dict

时间:2022-12-08 16:44:47浏览次数:46  
标签:cnt gt nm Python json python static dict path

pandas 合并操作

pandas多种合并操作总结(merge,join,concat,append)
df.join() 相同行索引的数据被合并在一起,因此拼接后的行数不会增加(可能会减少)、列数增加;
df.merge()通过指定的列索引进行合并,行列都有可能增加;merge也可以指定行索引进行合并-可以根据一个或多个键将不同DataFrame中的行连接起来
df.append()在DataFrame的末尾添加一行或多行;大致等价于pd.concat([df1,df2],axis=0,join='outer')。
pd.concat()通过axis参数指定在水平还是垂直方向拼接

类似于
   R语言 数据集的合并:merge,dplyr中的join函数(join为一系列函数,包括:full_join,inner_join,left_join,right_join。)
       cbind,rbind  rbind: 根据行进行合并,就是行的叠加  
   SQL
    left join /inner  join	 
    union all/union
pandas 增删改查
      一、insert()函数 df.insert()
      二、直接赋值法 语法:df[‘新列名’]=新列的值  df.loc[:,新列名]=值
	         df.loc[index名称] = [对应的数据],这个方法要主要index如果是与原表中有重复,则会将原数据修改,如果没有重复的话,就是在最后面添加对应数据
			 df.iloc[index位置] = [对应数据] 进行修改这个方法是对原有数据进行修改,并不是增加一行数据
	  三、reindex()函数 语法:df.reindex(columns=[原来所有的列名,新增列名],fill_value=值)
	  四、concat()函数 原理:利用拼接的方式,添加新的一列。好处是可以同时新增多个列名

python的字典

统计个数
 result_dict字典用来记录字母出现的次数。 
    第一次出现该键时,创建字典键,将其值设为1, 字典中再次出现该键时,也就是再次出现该字母时,让其值加1。
result_dict = {}
for i in str:
      # 第一次出现该键时,创建字典键,将其值设为1
    if i not in result_dict:
        result_dict[i] = 1
      # 字典中再次出现该键时,让其值加1
    else:
        result_dict[i] += 1
等价于
for i in str:  
    result_dict[i]= result_dict.get(i, 0) + 1

##分组类似-采用了字典和列表的方式  和java类似 用map存起来新的分组后数据
def generate_multi_dict(pairs_list) -> dict:
   f_dict_eg = dict()
   for key_cd, value_cd in pairs_list:
       data = f_dict_eg.get(key_cd)
       if data is None:
           f_dict_eg[key_cd] = []
       f_dict_eg[key_cd].append(value_cd)
   return f_dict_eg 

代码示例

#!/usr/bin/python3
# -*- coding: utf-8 -*- 
import os
import json
import pandas as pd

def parse_json_gt(json_path):
    label_map = {
            'book': 0, 
            'pencil': 0
            }
    all_classes = []
    if  os.path.exists(json_path):
        with open(json_path,"r") as fileobj:
            json_data = json.load(fileobj) 
            for label in json_data["book_labels"]:
                cls = label["book_type"]
                if cls not in all_classes:
                    all_classes.append(cls)
                label_map[cls]= label_map.get(cls, 0) + 1
    return (all_classes,label_map)

def static_detail(gt_path_root):
    all_cls_set =[]
    gt_file_cnt =[]
    grade_file_cnt=[]
    for (dirpath, dirnames, filenames) in os.walk(gt_path_root):
        if dirpath.endswith("grade"):
            pack_nm = os.path.basename(os.path.split(dirpath)[0])
            static_file_path = os.path.join(gt_path_root,pack_nm+".txt")
            with open(static_file_path, 'w', encoding='utf-8') as grade_file_obj:
                for grade_nm in os.listdir(dirpath):
                    if grade_nm.endswith(".json") :
                        static_sig = parse_json_gt(os.path.join(dirpath,grade_nm))
                        gt_file_cnt.append(grade_nm)
                        all_cls_set.extend( static_sig[0])
                        gt_mark ={'book': 0, 'pencil': 0}
                        for martk_label in static_sig[1]:
                            gt_mark[martk_label]= gt_mark.get(martk_label, 0) + static_sig[1].get(martk_label)
                        out_str = ' '.join([str(d) for d in [pack_nm,grade_nm,json.dumps(gt_mark, ensure_ascii=False)]])
                        grade_file_obj.write(out_str + '\n')    
                        print(pack_nm,grade_nm,gt_mark)
            print(static_file_path)
        if dirpath.endswith("class"):
            for class_nm in os.listdir(dirpath):
                if class_nm.endswith(".txt") :
                    grade_file_cnt.append(class_nm)
    print("!> > Total gt json file number : ",len(gt_file_cnt),len(grade_file_cnt))

def static_cnt(gt_path_root):
    gt_file_cnt =[]
    classfile_cnt=[]
    data_df = pd.DataFrame()
    out_pandas = os.path.join(gt_path_root,"static_all.txt")
    for (dirpath, dirnames, filenames) in os.walk(gt_path_root):
        if dirpath.endswith("grade"):
            pack_nm = os.path.basename(os.path.split(dirpath)[0])
            static_file_path = os.path.join(gt_path_root,pack_nm+".txt")
            gt_mark ={'book': 0, 'pencil': 0}
			gt_mid_file_cnt =[]
            for gt_json_name in os.listdir(dirpath):
                if gt_json_name.endswith(".json") :
                    gt_mid_file_cnt.append(gt_json_name)
                    static_sig = parse_json_gt(os.path.join(dirpath,gt_json_name))
                    gt_file_cnt.append(gt_json_name)
                    for martk_label in static_sig[1]:
                         gt_mark[martk_label]= gt_mark.get(martk_label, 0) + static_sig[1].get(martk_label)
            stat_all = 0
            for data in gt_mark:
                    stat_all =stat_all +gt_mark[data]
            #建dataframe对象是也应该是二维数组,再列表外再加一对括号即可        
            data_df=pd.concat([data_df,pd.DataFrame(data=[[pack_nm,len(gt_mid_file_cnt),stat_all]],columns=['pack_nm',"frame_cnt","obj_cnt"])],axis=0)
            print(pack_nm,len(gt_mid_file_cnt),stat_all)
        if dirpath.endswith("class"):
            for class_nm in os.listdir(dirpath):
                if class_nm.endswith(".pcd") :
                    classfile_cnt.append(class_nm)
    print(data_df)
    data_df.to_csv(out_pandas,sep=",",index=False)
    print("!> > Total gt json file number gt and pcd : ",len(gt_file_cnt),len(classfile_cnt))


if __name__ == '__main__':
    path_grade = r"C:\result_check"
    static_data = static_detail(path_grade)
static_data = static_cnt(path_grade)

python的pandas 代码示例

#!/usr/bin/python3
# -*- coding: utf-8 -*- 
import os
import json
import pandas as pd


if __name__ == '__main__':
    static = r"C:\result_check\gt_test.txt"
    static_test = r"C:\result_check\test.txt"

    ###read the data
    stres = pd.read_csv(static,header=0,sep=',')
    test =  pd.read_csv(static_test,header=0,sep=',')
	##check head data
    print(stres.head,test.head)
	## deal
    result = pd.merge(stres, test, how='inner', on=None, left_on="nm", right_on="test_nm",  
      left_index=False, right_index=False, sort=True,   indicator=False)
    ##sum
    print(sum(result.loc[:,"test_frame_cnt"]),sum(result.loc[:,"frame_cnt"]),sum(result.loc[:,"test_obj_cnt"]),sum(result.loc[:,"obj_cnt"]))
    ## Boolean Expressions index ;
    x =result.loc[:,"test_obj_cnt"]-result.loc[:,"obj_cnt"]>0
	### set the display
    pd.set_option('display.max_columns',None)
    pd.set_option('display.max_rows',None)
    pd.set_option('display.width',1000)
    pd.set_option('max_colwidth',1000)
	#show data
    print(result[x])

参考

python 之 列表中字典的分组(三种写法,总有一款适合你) https://blog.csdn.net/a6864657/article/details/126430506

标签:cnt,gt,nm,Python,json,python,static,dict,path
From: https://www.cnblogs.com/ytwang/p/16966519.html

相关文章

  • Docker 安装 Python
    1.拉取镜像:dockerpullpython:3.5查看镜像dockerimages2.创建python容器:dockerrun--namepython3.7-v/mydata:/python/myapp-w/mydata/python/myapppython:3.7......
  • Python中12个常用模块的使用教程
    1.time模块importtime*一*#时间戳--》结构化时间--》格式化的字符串时间-----------------------------------------------------------------------------res1=tim......
  • Python爬虫实战,Request+urllib模块,批量下载爬取网易云音乐飙歌榜所有音乐文件
    前言今天给大家介绍的是Python爬取飙歌榜所有音频数据并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得。首先是爬取之前应该尽可能伪装成浏览器而不被识别出来......
  • python字典
    python字典字典由key和value组成,一个key对应一个value,且key不能重复,这样我们能通过key来访问value。我们可以通过以下两中方式创建一个空字典dic1={}dic2=dict()......
  • 安装完python3,删掉了centos自带的python2,执行yum出错。
    bash:/usr/bin/yum:/usr/bin/python:badinterpreter:Nosuchfileordirectory原因删掉了centos自带的python。这是因为yum采用python作为命令解释器,原来系统自带......
  • (11)python 模块和包
    一、导入模块和包模块相当于一个.py文件,包相当于带有个__init__.py一个文件夹,既可按模块导入也可按包导入。1.导入模块或包import包名或模块名(as别名),包名或模块名(as......
  • 第八章python实训
    实验报告【实验目的】 1.掌握Python内置的标准模块和第三方模块的使用。【实验条件】1.PC机或者远程编程环境。 【实验内容】1.完成第八章  文件及目录操作实......
  • python将软件包和所有的依赖都下载到本地的目录?
    实现这个功能,只需2步 1、创建目录 目录用于存放包及其依赖 mkdir/root/rdbtools  2、安装软件 这里安装rdbtoolspython-lzf 重点:--download参......
  • python 包管理
    python官方的第三方库的仓库:​​https://pypi.org/​​ pip是python的包管理工具pip--version#查看当前版本 安装pipinstall-Upip#升级pippipinstall包名==1.0.4......
  • Python 解释器
    命令行输入py进入解释器py退出解释器quit() 1.在命令行输入多行会显示...  2.文件字符编码py默认文件的字符编码为utf-8如果使用其他类型,在文件的开头#-*-coding:gb23......