我得到了下面的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
这样,将过滤器应用于四舍五入的数据,但不会对实际数据进行任何更改/修改。