Python和从excel文件中导入 float

标签 python excel pandas import floating

所以我有一个看起来像这样的 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 行。 (5x42=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 行)。 如何处理这个问题?

最佳答案

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

相反,检查 closeness (真的很亲密):

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

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

df.drop_duplicates('R')

关于Python和从excel文件中导入 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38324421/

相关文章:

excel - 选择时更新单元格

python - 计算数据框不同列中值的频率

python - 使用 Pandas 分组直方图

python - 如何在 matplotlib 中使用绘图文件?

python - Sublime Text 中 python 中正则表达式的语法高亮会泄漏到周围的代码中

python - 从文本文件中逐行读取

python - 如何找到两个 Pandas 数据帧的元素调和平均值

vba - 错误 450 : Wrong number of arguments or invalid property assignment on vba

vba - 循环遍历每个打开的 WB 中的每个 WS 并取消保护

python - Pandas groupby 类别,评级,从每个类别中获得最高值(value)?