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