更改mdf对象(python、asammdf)中的特定值



我想更改mdf文件中的一些值(特别是,我想检查一致性,因为测量仪器由于某种原因在找不到值时写入10**10(。我不知道如何访问特定的值并更改它们。我想出了如何在频道名称中包含频道单元,这相当快:

with MDF(file) as mdf:
for i,gp in enumerate(mdf.groups):# add units to channel names (faster than using pandas)
for j,ch in enumerate(gp.channels):
mdf.groups[i].channels[j].name = ch.name + " [" + ch.unit + "]"

不幸的是,gp.channels似乎没有访问数据的方法,只有每个通道的一些元数据(或者至少我不知道属性或方法(。

我已经尝试过转换为数据帧,在那里这很容易,但文件很大,所以筛选所有数据点需要很长时间——我想如果直接在mdf中完成,这可能会更快。

# slow method with dataframe conversion
data = mdf.to_dataframe()
columns = data.columns.tolist()
for col in columns:
for i,val in enumerate(data[col]):
if val == 10**10:
data.loc[i, col] = np.nan

下采样解决了耗时过长的问题,但这也不是真正的解决方案,因为我确实需要原始采样率。访问数据不是问题,因为我可以使用select()get()方法,但我不能更改值——我不知道如何更改。理想情况下,我会将任何10**10更改为np.nan

好吧,我在pandas中找到了如何高效地执行if,这对我来说很有效。我使用了lambda函数和pandas DataFrame:的applymap方法的组合

data = data.applymap(lambda x: np.nan if x==10**10 else x)

在ignore_invalidation_bots=False的情况下调用get时,是否仍然得到10**10值?在mdf v4中,写入应用程序可以使用无效位来标记无效样本

相关内容

  • 没有找到相关文章

最新更新