我得到了下面的numpy数组,我将其转换为数据帧:

data =np.array([('210', 0.5316666570181647, 0.99102639737063),
                ('215', 0.5541666565152505, 0.9906073078204338),
                ('220', 0.5658333229211469, 0.9905192216775841),
                ('225', 0.6158333218035598, 0.9893290692391012),
                ('230', 0.10499999988824131, 0.9999143781512333),
                ('235', 0.061666665288309254, 0.9999999088637485),
                ('240', 0.061666665288309254, 0.9999999088637485),
                ('245', 0.061666665288309254, 0.9999999088637485)],
                dtype=[('index', '|O'), ('time', '<f8'), ('min_value',
                '<f8')])

df = pd.DataFrame(data)


现在,我需要获取仅具有min_values小于1.0的行,我尝试了以下操作,但行不通!

minf[minf.min_value < 1]

最佳答案

查看您的数据,很明显混淆的原因是浮点数的显示方式。 min_value中的每个值都小于1,但是在显示时,其中一些值会四舍五入:

In [1131]: df
Out[1131]:
  index      time  min_value
0   210  0.531667   0.991026
1   215  0.554167   0.990607
2   220  0.565833   0.990519
3   225  0.615833   0.989329
4   230  0.105000   0.999914
5   235  0.061667   1.000000
6   240  0.061667   1.000000
7   245  0.061667   1.000000


但是df.min_value < 1注册为所有人都小于1,因为您要处理的是实际值,而不是要打印的内容。

In [1133]: df.min_value < 1
Out[1133]:
0    True
1    True
2    True
3    True
4    True
5    True
6    True
7    True
Name: min_value, dtype: bool




作为解决方案,请考虑对数字进行四舍五入。然后,您可以过滤掉这些数字。例如,您可以使用np.around并舍入到小数点后5位:

In [1136]: df[np.around(df.min_value, 5) < 1]
Out[1136]:
  index      time  min_value
0   210  0.531667   0.991026
1   215  0.554167   0.990607
2   220  0.565833   0.990519
3   225  0.615833   0.989329
4   230  0.105000   0.999914


这样,将过滤器应用于四舍五入的数据,但不会对实际数据进行任何更改/修改。

10-04 22:14
查看更多