0

我想更改 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()orget()方法,但我无法更改值 - 我不知道如何。理想情况下,我会将 any 更改10**10np.nan.

4

2 回答 2

0

好的,我想出了如何在有效的情况下进行操作pandas,这对我有用。我使用了lambda函数和aapplymap方法的组合pandas DataFrame

data = data.applymap(lambda x: np.nan if x==10**10 else x)
于 2019-11-20T10:31:00.560 回答
0

当你用 ignore_invalidation_bots=False 调用 get 时,你仍然得到 10**10 的值吗?在 mdf v4 中,编写应用程序可以使用失效位来标记无效样本

于 2019-11-20T20:55:45.137 回答