为什么我的值没有在CSV文件中使用np.nan替换



我是python的新手,在将CSV文件中低于特定阈值的值更改为NaNs时遇到了问题。

我的脚本在一个数据集上运行得很好,但在另一个数据集中运行得不好。这些数据集之间的主要区别是CSV文件的维度:1800行x 13列与1800行x 28列。这些列包含x、y位置和从视频分析中导出的不同身体部位的似然值。

这是我用来检查CSV文件中的值是否更改为NaN的代码。

import pandas as pd
import numpy as np

absolute_path = 'mypath/example.csv'
p_cutoff = 0.9
df = pd.read_csv(absolute_path, header=[1,2], index_col=0)
print(df.head)
print('before: ')
print(df.isna().sum())
for i, row in df.iterrows():
if df.loc[i]['arm_L']['likelihood'] < p_cutoff:
df.loc[i]['arm_L']['x'] = np.nan
df.loc[i]['arm_L']['y'] = np.nan
print('')
print('after: ')
print(df.isna().sum())
print(df.head)

当数据帧有13列时,将x和y坐标更改为nan是有效的,但当我在只有一列(即多个身体部位(的数据帧上尝试时,x-y值不会被替换。

有人知道怎么解决这个问题吗?

窄数据帧示例:

示例宽数据帧:

预期结果

这是因为方法loc处理多个列的方式,尽管您可以进行一些小的更改,但如果您使用import panda作为pd,它的计算速度会更快将numpy导入为np

absolute_path = 'mypath/example.csv'
p_cutoff = 0.9
df = pd.read_csv(absolute_path, header=[1,2], index_col=0)
print(df.head)
print('before: ')
print(df.isna().sum())
for col in ['x', 'y']
df['arm_L'][col] = np.where(df['arm_L']['likelihood'] < p_cutoff, 
np.nan, df['arm_L'][col])
print('')
print('after: ')
print(df.isna().sum())
print(df.head)

相关内容

  • 没有找到相关文章

最新更新