Pandas_数据预处理_读写去重

列编辑

“Column selection mode”、“列块模式”、“列编辑”、“多光标功能
notepad ++ 列模式 : alt +鼠标左键 列模式选择
vscode :Shift+Alt+鼠标左键  列模式,多行同时操作的方法步骤快捷键

Pandas 数据预处理

read_csv() sep 
    header  names encoding
df['col'] = 'str' + df['col'].astype(str)
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
         df.drop_duplicates(subset=['brand', 'style'], keep='last')

import numpy as np
df['val'] = np.arange(len(df))//4+1

Dataframe d读写

DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression='infer', quoting=None, quotechar='"', line_terminator=None, chunksize=None, date_format=None, doublequote=True, escapechar=None, decimal='.', errors='strict')
  columns  header
  index  index_label

Dataframe拼接和增加列

concat()函数利用拼接的方式,添加新的一列。好处是可以同时新增多个列名。
    df1 = pd.concat([df1, pd.DataFrame(columns=['f'])])	
 
直接赋值法  
    df[‘新列名’]=新列的值
    df.loc[:,新列名]=值	
 df['level'] = df.apply(lambda x: getlevel(x.score), axis=1)

代码示例

#-*- coding: utf-8 -*-
#!/usr/bin/python3

from pathlib import Path
import json
import os
import numpy as np
import pandas as pd 


def load_jest_json_label(json_dir,son_name):
    if test_json.exists():
        gt_npy = []
        gt_boxes = json.load(open(test_json, 'r'))['labels']
        for test in gt_boxes:
            type=test["type"]
			num=test["num"]
            gt_npy.append([type,num] )
		#将数据转换为Dataframe
        gt_boxes = pd.DataFrame(gt_npy)
        gt_boxes.columns =["type","num"]
        return gt_boxes


if __name__ == '__main__':
    root_dir =r"/data/test"
    js_file_list = os.listdir(root_dir)
    ##将Dataframe展开
    json_ts_info =[]
    for sig_js_file in  js_file_list:
        box_all_nm = load_jest_json_label(root_dir,sig_js_file)
		############## group 的信息
        #个DataFrameGroupBy对象,直接打印DataFrameGroupBy对象只能看到它的内存地址
        grouped_data  = box_all_nm.groupby(['type'])
        #<class 'tuple'> <class 'str'> <class 'pandas.core.frame.DataFrame'>
        #内部结构是[(分组名1, 子DataFrame1), (分组名2, 子DataFrame2), ...]
        #。遍历出来的是一个个元组,每个元组对应一个分组,元组的第一个元素与分组列里的值对应,元组的第二个元素是分到当前小组的数据,是一个DataFrame
        # 分组对象的groups属性 可以返回分组信息,结果是一个形似字典的对象,由分组名和此分组数据在原DataFrame中的行索引组成 get_group()方法可以返回指定分组名的子DataFrame
        group_name = [gn for gn in grouped_data.groups.keys()]
        groupde_value = grouped_data.max().values.tolist()
        info = list(zip(group_name,groupde_value))
        json_ts_info.append(info)
    ###展开嵌套的list的方式
    ###等价于以下 嵌套的数据展开
    json_data = [sig_group_label for sig_json_file in json_ts_info for sig_group_label in sig_json_file]
    # # s=[]
    # for data in json_ts_info:
    #     for sig_group_label in data:
    #          print("### ",sig_group_label,len(data))
    #          s.append(sig_group_label)
    result = pd.DataFrame(json_data)
    put_rst = pd.DataFrame(result[1].values.tolist())
    # concat(), 按行连接(纵向)也可以按列连接(横向)
    rsult_df = pd.concat([result[0], put_rst], axis=1)
    rsult_df.columns= ["type","num"]
    data_info_stat = rsult_df.groupby("type")[["num"]].max()
    ##取部分组进行计算 #print(rsult_df.groupby("type").max())
    max_info = rsult_df.groupby("type")[[ts, ]].max()
    ##pandas 重命名方式一
    max_info.columns=["ts", ]
    print(max_info)
    min_info = rsult_df.groupby("type")[["num",]].min()
     ##pandas 重命名方式二
    min_info.rename(columns={"pts_num":"num"},inplace=True)
    print(min_info)
    ##dataframe  join方法是将两个表格按照索引进行合并,不需要指定列名。
    # .join(right, how='inner')
    statis_info =max_info.join(min_info,how="inner")
    # 将索引列转换为正常列 原始的索引列被添加为了新的列”index”,而数据框的索引则被重置为0开始的整数。想保留原始索引列,可以设置参数drop=False
    statis_info = statis_info.reset_index()
    print(statis_info)
    #concat(), merge(), append(), join() 需要指定合并的方式(inner、outer、left、right)和合并的列名
    base_line = pd.DataFrame(base_info)
    base_line.columns=base_info_nm
    statis = pd.merge(statis_info,base_line,on="type",how="left")

图片读取方式

  cv2.imread
     是uint8类型,0-255范围,图像形状是(H,W,C),读入的顺序是BGR
  cv2.imwrite - 保存numpy格式的图片
  	cv2.imwrite("cv2.jpg",img)
  	
  matplotlib.pyplot.imread
      图片是numpy数组,是unit8类型,0-255范围,图像形状是(H,W,C),读入的顺序是RGB	
  plt.imsave - 保存numpy格式的图片
  	plt.imsave('plt.jpg',img)
  	
  3.PIL.image.open	
    PIL.image - 保存PIL格式的图片
    img.save("PIL.jpg")

参考

 vscode 列操作_[vscode]列编辑功能 https://blog.csdn.net/weixin_32616935/article/details/113452810
http://pandas.pydata.org/pandas-docs/stable/user_guide/io.html#io-read-csv-table	 
posted @ 2023-06-02 12:17  辰令  阅读(21)  评论(0编辑  收藏  举报