我想要更改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。
发布于 2019-11-20 18:31:01
好了,我想出了如何在pandas中高效地做这件事,这对我来说很有效。我结合使用了lambda函数和pandas DataFrame的applymap方法
data = data.applymap(lambda x: np.nan if x==10**10 else x)发布于 2019-11-21 04:55:45
当你用ignore_invalidation_bots=False调用get的时候,你还会得到10**10的值吗?在mdf v4中,写入应用程序可以使用无效位来标记无效样本
https://stackoverflow.com/questions/58951319
复制相似问题