编程语言
首页 > 编程语言> > Python并从excel文件导入浮点数

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')

标签:python,import,excel,pandas,floating
来源: https://codeday.me/bug/20190623/1268353.html