日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pandas DataFrame四种写入方法效率对比

發布時間:2023/12/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pandas DataFrame四种写入方法效率对比 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

該測試程序是將protocol變量轉換為DataFrame類型為了便于使用numpy等數學工具
ImuEncode_pb2 是使用protocol生成的model, 具體使用方法可參考Protocol buffer 指南。

這是我使用的一些變量的聲明

import time import ImuEncode_pb2 import numpy as np import pandas as pd from pandas.core.frame import DataFrame from ImuSignal import LegString from ImuSignal import LegPositionString from ImuSignal import SignalAttributeDict from OnlineClassifier import OnlineClassifierImuSignalDataset = ImuEncode_pb2.ImuSignalDataset() for i in range(50):imusignal =ImuSignalDataset.imusignal.add()for j in range(4):signal = imusignal.signal.add()signal.TimeStamp = 0signal.acc.AccX = 0signal.acc.AccY = 0signal.acc.AccZ = 0signal.angle.Roll = 0signal.angle.Pitch = 0signal.anglerate.Course = 0signal.quaternion.v = 0signal.quaternion.x = 0signal.quaternion.y = 0signal.quaternion.z = 0signal.leg = ImuEncode_pb2.Signal.RTsignal.legposition = ImuEncode_pb2.Signal.Footrate = 100 #sample rate period = 0.5 #classify period Leg = ['RT','LT'] Leg_Position = ['Foot','Thigh'] angle = ['Roll','Pitch','Course'] accel = ['AccX','AccY','AccZ']

特別注意下面代碼段的加入,這是對于內存的聲明,我是隨便賦值不知道Python變量的聲明原理后續完善

SignalFrame = DataFrame() for leg in Leg:for leg_position in Leg_Position:for signal in accel + angle:SignalFrame[leg_position+"_"+signal+"_"+leg] = np.arange(999999999,999999999+int(period*rate),1)/1000000

該方法不簡單并且耗時應該是最長的,測試耗時為: 0.09793972969055176

SignalFrame = DataFrame() for leg in Leg:for leg_position in Leg_Position:for signal in accel + angle:SignalFrame[leg_position+"_"+signal+"_"+leg] = np.arange(999999999,999999999+int(period*rate),1)/1000000starttime = time.time() SignalFrame = pd.concat([pd.DataFrame(data={"Foot_AccX_RT":imusignal.signal[0].acc.AccX, "Foot_AccY_RT":imusignal.signal[0].acc.AccY, "Foot_AccZ_RT":imusignal.signal[0].acc.AccZ,\"Foot_Roll_RT":imusignal.signal[0].angle.Roll, "Foot_Pitch_RT":imusignal.signal[0].angle.Pitch, "Foot_Course_RT":imusignal.signal[0].anglerate.Course,\"Thigh_AccX_RT":imusignal.signal[1].acc.AccX, "Thigh_AccY_RT":imusignal.signal[1].acc.AccY, "Thigh_AccZ_RT":imusignal.signal[1].acc.AccZ,\"Thigh_Roll_RT":imusignal.signal[1].angle.Roll, "Thigh_Pitch_RT":imusignal.signal[1].angle.Pitch, "Thigh_Course_RT":imusignal.signal[1].anglerate.Course,\"Foot_AccX_LT":imusignal.signal[2].acc.AccX, "Foot_AccY_LT":imusignal.signal[2].acc.AccY, "Foot_AccZ_LT":imusignal.signal[2].acc.AccZ,\"Foot_Roll_LT":imusignal.signal[2].angle.Roll, "Foot_Pitch_LT":imusignal.signal[2].angle.Pitch, "Foot_Course_LT":imusignal.signal[2].anglerate.Course,\"Thigh_AccX_LT":imusignal.signal[3].acc.AccX, "Thigh_AccY_LT":imusignal.signal[3].acc.AccY, "Thigh_AccZ_LT":imusignal.signal[3].acc.AccZ,\"Thigh_Roll_LT":imusignal.signal[3].angle.Roll, "Thigh_Pitch_LT":imusignal.signal[3].angle.Pitch, "Thigh_Course_LT":imusignal.signal[3].anglerate.Course,\},index=[0]) for imusignal in ImuSignalDataset.imusignal],ignore_index=True) endtime = time.time() print("cost time:",endtime-starttime)

該方法不簡單并且耗時長,測試耗時為: 0.04797029495239258

SignalFrame = DataFrame()for leg in Leg:for leg_position in Leg_Position:for signal in accel + angle:SignalFrame[leg_position+"_"+signal+"_"+leg] = np.arange(999999999,999999999+int(period*rate),1)/1000000starttime = time.time() for imusignal in ImuSignalDataset.imusignal:SignalFrame = SignalFrame.append({"Foot_AccX_RT":imusignal.signal[0].acc.AccX, "Foot_AccY_RT":imusignal.signal[0].acc.AccY, "Foot_AccZ_RT":imusignal.signal[0].acc.AccZ,\"Foot_Roll_RT":imusignal.signal[0].angle.Roll, "Foot_Pitch_RT":imusignal.signal[0].angle.Pitch, "Foot_Course_RT":imusignal.signal[0].anglerate.Course,\"Thigh_AccX_RT":imusignal.signal[1].acc.AccX, "Thigh_AccY_RT":imusignal.signal[1].acc.AccY, "Thigh_AccZ_RT":imusignal.signal[1].acc.AccZ,\"Thigh_Roll_RT":imusignal.signal[1].angle.Roll, "Thigh_Pitch_RT":imusignal.signal[1].angle.Pitch, "Thigh_Course_RT":imusignal.signal[1].anglerate.Course,\"Foot_AccX_LT":imusignal.signal[2].acc.AccX, "Foot_AccY_LT":imusignal.signal[2].acc.AccY, "Foot_AccZ_LT":imusignal.signal[2].acc.AccZ,\"Foot_Roll_LT":imusignal.signal[2].angle.Roll, "Foot_Pitch_LT":imusignal.signal[2].angle.Pitch, "Foot_Course_LT":imusignal.signal[2].anglerate.Course,\"Thigh_AccX_LT":imusignal.signal[3].acc.AccX, "Thigh_AccY_LT":imusignal.signal[3].acc.AccY, "Thigh_AccZ_LT":imusignal.signal[3].acc.AccZ,\"Thigh_Roll_LT":imusignal.signal[3].angle.Roll, "Thigh_Pitch_LT":imusignal.signal[3].angle.Pitch, "Thigh_Course_LT":imusignal.signal[3].anglerate.Course,\},ignore_index=True) endtime = time.time() print("cost time:",endtime-starttime)

該方法簡單并且耗時僅長于最快的實現方法,測試耗時為:0.016989469528198242

SignalFrame = DataFrame()for leg in Leg:for leg_position in Leg_Position:for signal in accel + angle:SignalFrame[leg_position+"_"+signal+"_"+leg] = np.arange(999999999,999999999+int(period*rate),1)/1000000 starttime = time.time() i=0 for imusignal in ImuSignalDataset.imusignal:for SignalData in imusignal.signal:signal_dict = SignalAttributeDict(SignalData)for signal in angle + accel:SignalFrame.at[i,LegPositionString(SignalData.legposition)+"_"+signal+"_"+LegString(SignalData.leg)]=signal_dict[signal]i+=1 endtime = time.time() print("cost time:",endtime-starttime)

該方法不簡單,如果數據量較大可能會影響數據的準確度,但是耗時應該是最短的,測試耗時為:0.012990951538085938

SignalFrame = DataFrame()for leg in Leg:for leg_position in Leg_Position:for signal in accel + angle:SignalFrame[leg_position+"_"+signal+"_"+leg] = np.arange(999999999,999999999+int(period*rate),1)/1000000starttime = time.time() i=0 for imusignal in ImuSignalDataset.imusignal:SignalFrame.loc[i]=[imusignal.signal[0].acc.AccX , imusignal.signal[0].acc.AccY , imusignal.signal[0].acc.AccZ,\imusignal.signal[0].angle.Roll , imusignal.signal[0].angle.Pitch , imusignal.signal[0].anglerate.Course,\imusignal.signal[1].acc.AccX , imusignal.signal[1].acc.AccY , imusignal.signal[1].acc.AccZ,\imusignal.signal[1].angle.Roll , imusignal.signal[1].angle.Pitch , imusignal.signal[1].anglerate.Course,\imusignal.signal[2].acc.AccX , imusignal.signal[2].acc.AccY , imusignal.signal[2].acc.AccZ,\imusignal.signal[2].angle.Roll , imusignal.signal[2].angle.Pitch , imusignal.signal[2].anglerate.Course,\imusignal.signal[3].acc.AccX , imusignal.signal[3].acc.AccY , imusignal.signal[3].acc.AccZ,\imusignal.signal[3].angle.Roll , imusignal.signal[3].angle.Pitch , imusignal.signal[3].anglerate.Course]i+=1 endtime = time.time() print("cost time:",endtime-starttime)

用于生成ImuEncode_pb2的ImuEncode.proto文件如下

syntax = "proto2"; package ImuTutorial;message Signal {enum Leg {RT = 0;LT = 1;}enum LegPosition{Foot = 0;Thigh = 1;}required Leg leg = 1 [default = RT];required LegPosition legposition = 2 [default = Foot];optional float TimeStamp = 3;optional int64 time = 4;optional int32 id = 5;message Acc{required float AccX = 1;required float AccY = 2;required float AccZ = 3;}message Angle{optional float Course = 1;required float Roll = 2;required float Pitch = 3;}message AngleRate{required float Course = 1;optional float Roll = 2;optional float Pitch = 3;}message Quaternion{optional float v = 1;required float x = 2;required float y = 3;required float z = 4;}required Acc acc = 6;required Angle angle= 7;required AngleRate anglerate= 8;optional Quaternion quaternion = 9; }message ImuSignal {required uint64 time = 1;repeated Signal signal = 2; }message ImuSignalDataset {repeated ImuSignal imusignal = 1; }message Datalength {required fixed32 length = 1; }

總結

以上是生活随笔為你收集整理的Pandas DataFrame四种写入方法效率对比的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。