CSV文件的批量化处理(一)

一、需求描述

类似示波器、矢量网络分析仪等设备,在测量数据时,有时需要对同一个信号测多组数据,一般会将原始波形数据保存为.csv文件格式,随后根据不同的实验需求对原始数据进行处理。

现用矢量网络分析仪测某个器件的最小S11参数和相对应的频率点,保存了135个csv文件,5个文件为一组,需要将每个csv文件的最小S11参数和其对应的频率点找出,并且每五个数据取一次平均值,最后保存为csv文件。

二、逻辑设计

CSV文件的批量化处理(一)_第1张图片

三、程序设计

3.1 模块导入

# -*- coding: UTF-8 -*-
import os
import numpy as np
import pandas as pd
from more_itertools import chunked

3.2 子函数设计

"""
 读取单个csv表格数据
 传入一个参数filepath:确定文件位置
"""


def csv_read(rpath):
    data_frame = pd.read_csv(rpath, encoding='gbk', float_precision='high', header=None)
    # S11最小值
    col_min = pd.DataFrame(data_frame[[1]]).min()
    # 返回S11最小值的行索引号
    index1 = pd.DataFrame(data_frame[[1]]).idxmin()[1]
    # 返回耦合频率,单位GHz
    freq = data_frame.iloc[index1, 0]/1000000000
    csv_dict = {'CouplingFrequence': freq, 'S11': col_min[1]}
    return csv_dict

"""
传入4个参数
fpath:暂存文件夹位置路径
name: 新生成保存文件名
gap:间隔gap个取平均
precision:取小数点精度
"""


def new_csv_average(fpath, name, gap, precision):
    new_data_frame = pd.read_csv(fpath, encoding='gbk', dtype=str, header=None)
    fre_list = np.array(np.float64(new_data_frame[0])).tolist()
    s11_list = np.array(np.float64(new_data_frame[1])).tolist()

    new_fre = [sum(x)/len(x) for x in chunked(fre_list, gap)]
    new_s11 = [sum(x)/len(x) for x in chunked(s11_list, gap)]

    new_fre_average = [round(i, precision) for i in new_fre]
    new_s11_average = [round(i, precision) for i in new_s11]

    new_list = list(map(list, zip(*[new_fre_average, new_s11_average])))
    new_list_names =['CouplingFrequence', 'S11']
    save_list = pd.DataFrame(columns=new_list_names, data=new_list)
    save_list.to_csv(str(name)+".csv", mode='w', index=False, sep=',')

# 写入csv文件


def csv_write(name, list1, index):
    da_frame = pd.DataFrame(list1, index=[index], columns=["CouplingFrequence", "S11"])
    da_frame.to_csv(name, mode='a', index=False, sep=',', header=False)

3.3 主函数调用

def main(rpath):
    filenames = os.listdir(rpath)
    filenames.sort(key=lambda x: int(x[:-4]))  # 按整数类型数字排序
    name = input("请输入暂存文件名:")
    fina_name = input("请输入最终文件名:")
    csv_path = str(name) + '.csv'
    index = 0
    for filename in filenames:
        index += 1
        filepath = rpath+'\\'+filename
        csv_write(csv_path, csv_read(filepath), index)  # 未取平均的CSV文件
    new_csv_average(csv_path, fina_name, 5, 10)

3.4 运行程序

if __name__ == '__main__':
    filepath1 = "G:\\3"
    main(filepath1)

4、文件显示与过程

CSV文件的批量化处理(一)_第2张图片

CSV文件的批量化处理(一)_第3张图片

CSV文件的批量化处理(一)_第4张图片

 CSV文件的批量化处理(一)_第5张图片

 

 

你可能感兴趣的:(Python,python小项目,python,pycharm,自动化)