首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改mdf-object中的特定值(python、asammdf)

更改mdf-object中的特定值(python、asammdf)
EN

Stack Overflow用户
提问于 2019-11-20 17:50:08
回答 2查看 340关注 0票数 0

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

代码语言:javascript
复制
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中完成,速度会快很多。

代码语言:javascript
复制
# 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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-20 18:31:01

好了,我想出了如何在pandas中高效地做这件事,这对我来说很有效。我结合使用了lambda函数和pandas DataFrameapplymap方法

代码语言:javascript
复制
data = data.applymap(lambda x: np.nan if x==10**10 else x)
票数 0
EN

Stack Overflow用户

发布于 2019-11-21 04:55:45

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58951319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档