微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python并从excel文件导入浮点数

所以我有一个看起来像这样的excel文件

    Name    R   s   l2  max_amplitude   ref_amplitude
    R_0.3_s_0.5_l2_0.1  0.3 0.5 0.1 1.45131445  1.45131445
    R_0.3_s_0.5_l2_0.6  0.3 0.5 0.6 3.52145743  3.52145743
   ...
    R_1.1_s_2.0_l2_1.6  1.1 2.0 1.6 5.07415199  5.07415199
    R_1.1_s_2.0_l2_2.1  1.1 2.0 2.1 5.78820419  5.78820419
    R_1.1_s_2.0_l2_2.6  1.1 2.0 2.6 5.84488964  5.84488964
    R_1.1_s_2.0_l2_3.1  1.1 2.0 3.1 6.35387516  6.35387516

使用pandas模块我将数据导入数据框

import pandas as pd
df = pd.read_excel("output_var.xlsx", header=0)

一切似乎都没问题:

df

在命令行中生成

       R    s   l2  max_amplitude  ref_amplitude
0    0.3  0.5  0.1       1.451314       1.451314
1    0.3  0.5  0.6       3.521457       3.521457
2    0.3  0.5  1.1       4.770226       4.770226
...
207  1.1  2.0  2.1       5.788204       5.788204
208  1.1  2.0  2.6       5.844890       5.844890
209  1.1  2.0  3.1       6.353875       6.353875

[210 rows x 5 columns]

现在我需要根据R的值进行一些计算,所以我需要对数组进行切片. R列包含5个不同的值:0.3,0.5,0.7,0.9和1.1.这5个值中的每一个都有42行. (5×42 = 210)
要从“R”中删除重复项,我试试

set(df.R)

返回:

{0.29999999999999999,
 0.5,
 0.69999999999999996,
 0.89999999999999991,
 0.90000000000000002,
 1.1000000000000001}

除了代表0.3为0.29999等之外,R还有6个(而不是5个)不同的值.有时0.9的接缝被解释为0.89999999999999991,有时为0.90000000000000002
这可以(部分)解决

set(round(df.R,1))

其中(至少)返回5个值:

{0.29999999999999999,
 0.5,
 0.69999999999999996,
 0.90000000000000002,
 1.1000000000000001}

但现在我来到危险的地方.如果我想根据已知的R值(0.3,0.5,0.7,0.9和1.1)进行切片

len(df[df.R==0.3])

回报

42

len(df[df.R==0.9])

回报

41

一个值被Python删除! (记住,5个R中每个都有42行,给出文件中210行的总数).
如何处理这个问题?

解决方法:

不要检查浮动是否相等.浮点运算存在一些问题(例如,检查here).

相反,检查closeness(非常接近):

import numpy as np
len(df[np.isclose(df.R, 0.9)])

通常,如果你不将系列转换为集合,pandas会处理它.所以如果你想删除重复项,我建议使用pandas方法

df.drop_duplicates('R')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐