所以我有一个看起来像这样的 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/