更改 mdf 对象中的特定值 (python, asammdf)
change specific value in mdf-object (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
中找到了有效的方法,这对我有用。
我结合使用了 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 中,编写应用程序可以使用无效位来标记无效样本
我想更改 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
中找到了有效的方法,这对我有用。
我结合使用了 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 中,编写应用程序可以使用无效位来标记无效样本