我想从 MDF 文件转换为数据帧



我使用像asammdf或mdfreader这样的MDF文件。 但是我的数据文件太 大。所以,我想读取特定数据并制作数据帧。

MDF数据
  1. 读取器使用来自ASAMMMDF导入MDF的ASAMMDF在MDFreader中,由于我的MDF
    文件是同名数据,并且在重新采样时存在一些麻烦(错误的数据出来)

文件名 = test_t16.dat" ;我的中密度纤维板数据文件

yop = MDF(文件名) ; 使用 asammdf 的 MDF 读取器

whl_rr = yop.get('WHL_SPD_RR') ;I从MDF中选择一些数据 文件(是的)

whl_rr =

invalidation_bits = {无类型} 无

master_metadata = {元组} ('TimeChannel', 1)

名称 = {str} 'WHL_SPD_RR'

原始 = {布尔} 假

样本 = {ndarray} [0. ...0.]

源 = {无类型} 无

stream_sync = {布尔} 假

时间戳 = {ndarray} [ 240.4053 ...2050.81525]

单位 = {str} '公里/小时'>我想像这样进行数据框


from asammdf import MDF
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
filename = r"C:UserswonyoPycharmProjectstesttest_t16.dat"
yop = MDF(filename)
signallist = [ "WHL_SPD_RR","WHL_SPD_FR", "WHL_SPD_RL","WHL_SPD_FL"]
df=[]
def group_len(yop, start, stop):             
for i in range(start, stop):           
if yop.get_group(i).empty != True:
if i == start:
max_len = len(yop.get_group(i).TimeChannel)
min_time = min(yop.get_group(i).TimeChannel)
else:
max_len = min(max_len, len(yop.get_group(i).TimeChannel))
min_time = max(min_time, min(yop.get_group(i).TimeChannel))
return max_len-1000, max(242, min_time + 2) 
grlen_time = group_len(yop, 68, 140)
max_len = grlen_time[0]
min_time = grlen_time[1]
time = np.linspace(0, (max_len - 1) * 0.01, max_len)
for i in range(0,5):
signal = yop.get(signallist[i])
signal.timestamps = signal.timestamps - min_time
signal = signal.interp(time)
data_sg = signal.samples
name_sg = signal.name
inex_sg = signal.timestamps
mydata = pd.DataFrame( data =data_sg , index=index_sg, columns=name_sg)
print(df)
whl_spd_fl = signal()

我想这样(数据框)

time    whl_spd_rr    whl_spd_rl   whl_spd_fl    whl_spd_fr
0         0              0            0             0
0.01      1              1            1             1
0.02      2              2            2             2
0.03      4              4            4             4
0.04      10             10           10            10
0.05      15             15           15            15
0.06      20             19           19            19
0.07      21             20           20            20
0.08      22             21           21            21
0.09      24             23           21            22
0.10      10             11           11            11
0.11      8              10           10            10

至少从API 的 asammdf 版本 5.10.3:

删除了熊猫导出选项。 应改用方法to_dataframe。

from asammdf import MDF
mdf_obj = MDF('file.mf4')
df = mdf_obj.to_dataframe()
df= mdf.filter(signallist).export(fmt='pandas')
yop = MDF(file_name, memory='minimum')
to_keep = ['Channl1', 'Channel2', ('CR_Bms_Soc_Pc', 102) ] # and so on
df = yop.filter(to_keep).cut(start=240, stop=2050).export('pandas', raster=0.01)

最新更新