相关疑难解决方法(0)

Pandas布尔数据帧搜索返回False但应为True

问题

我正在尝试搜索pandas数据帧以查找单个值.我正在搜索的数据帧列是float64类型.

工作实例

这是我想要的一个工作示例,其数据框的类型为int64.

myseries = pd.Series([1,4,0,7,5], index=[0,1,2,3,4])
myseries
Run Code Online (Sandbox Code Playgroud)

输出如下:

0    1
1    4
2    0
3    7
4    5
dtype: int64
Run Code Online (Sandbox Code Playgroud)

现在搜索:

myseries == 4
Run Code Online (Sandbox Code Playgroud)

结果:

0    False
1     True
2    False
3    False
4    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)

不工作的例子

这是我的数据样本.

df['difference']
Run Code Online (Sandbox Code Playgroud)

结果

0    -2.979296
1    -0.423903
2     0.396515
...
48    0.450493
49   -1.216324
Name: priceDiff1, dtype: float64
Run Code Online (Sandbox Code Playgroud)

如您所见,它的类型为float64.现在这是问题所在.如果我复制第2行的值,并像之前一样创建条件语句,则不会返回True.

df['difference'] == 0.396515
Run Code Online (Sandbox Code Playgroud)

产量

0     False
1     False
2     False
...
48    False
49    False
Name: priceDiff1, dtype: bool
Run Code Online (Sandbox Code Playgroud)

第2行应为True.在这个问题上对此问题的任何帮助都会很棒.我认为正在发生的是,我的查询没有将类型设置为float64,并且可能假设它是一个不同的类型.我已经通过将列类型从float64向下转换为float32进行了测试,没有运气.

python search dataframe pandas

2
推荐指数
1
解决办法
349
查看次数

Python C++浮点数学表示错误

在C++中,

double x = 1.0; 
double y = x / 3.0; 
if (x == y * 3.0)
  cout << " They are equal!" ; 
else
  cout << " They are NOT equal." ;
Run Code Online (Sandbox Code Playgroud)

将打印

‘They are NOT equal.’ 
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,由于1/3的非精确表示为(二进制)数量的有限大小的尾数.但是在Python中(在https://repl.it/repls/MessyJaggedMouse上),

x = 1.0
y = x / 3.0
x == y * 3.0
Run Code Online (Sandbox Code Playgroud)

版画

True
Run Code Online (Sandbox Code Playgroud)

何时以及为什么Python会偏离上述预期的行为?编辑:Python不会离开 - 请参阅下面的答案.

c++ python floating-point

2
推荐指数
1
解决办法
120
查看次数

将变量与多个值进行比较的简洁方法

我一直试图了解是否可以使用类似于我在下面演示的语句的 if 语句。我的理解是不是?

for i in range(10):
  if i == (3 or 5) or math.sqrt(i) == (3 or 5):
    numbers.append(i)
Run Code Online (Sandbox Code Playgroud)

使用这段代码,我只能得到数字3& 9,而我应该得到3, 5, 9. 是否有另一种方法可以不列出下面的代码?

for i in range(10):
  if i == 3 or i == 5 or math.sqrt(i) == 3 or math.sqrt(i) == 5:
    numbers.append(i)
Run Code Online (Sandbox Code Playgroud)

python if-statement

2
推荐指数
1
解决办法
80
查看次数

如何检查浮点数是否近似整数

在 Python 中,如何检查浮点数是否近似为整数,并具有用户指定的最大差异?

我在想类似的东西is_whole(f, eps),有f问题的值在哪里,eps是允许的最大偏差,结果如下:

>>> is_whole(1.1, 0.05)
False
>>> is_whole(1.1, 0.2)
True
>>> is_whole(-2.0001, 0.01)
True
Run Code Online (Sandbox Code Playgroud)

python floating-point

1
推荐指数
1
解决办法
200
查看次数

当变量等于if语句时,为什么python不会停止循环

当我运行我的代码时,数字变成42.0(它应该做什么),但当它变成42.0时(虽然if语句或while循环)不会停止,我将如何让我的代码停止?

import time
def life(inp):
    inp = float(inp)
    while float(inp) != float(42):
        inp = inp*12/4/4+4+6.5
        if float(inp) == float(42) or inp == 42:
            print inp
            break
        print inp
        time.sleep(0.1)


life(6)
Run Code Online (Sandbox Code Playgroud)

python loops

1
推荐指数
1
解决办法
115
查看次数

二进制搜索平方根2

我有一个问题,我的二进制搜索算法找到2的平方根似乎是在一个无限循环并永远运行:

num = 2
low = 1
high = num
i = 0
while((i**2) != 2): #was while(low<high): but wasnt working with it either
 i = low + (high - low) / 2;

 sqrt = i * i

 if (sqrt == num):
     print(i)
 elif(sqrt < num):
     low = i
 else:
     high = i
print(sqrt)    

testRoot = 2 ** (.5)
print(testRoot)
Run Code Online (Sandbox Code Playgroud)

我不确定我的while循环是否存在问题.我认为这将是一个非常直接的二进制搜索算法,稍作修改以适应平方根方面.

在运行我的代码时,我似乎无法让它产生任何输出.我不确定代码或编译器是否存在真正的问题,因为我认为我的算法与我过去的算法非常接近.

python binary-search numerical-methods square-root

1
推荐指数
1
解决办法
343
查看次数

为什么我的浮点值看起来不等于它本身?

#include<iostream.h>
using namespace std;
int main()
{
      float x=1.1;
      if(x==1.1)
         cout<<"yes";
      else
         cout<<"no";
      return 0;
}
Run Code Online (Sandbox Code Playgroud)

我将值 1.1 分配给 x 并检查 x 的值是否为 1.1?

c++ floating-point

1
推荐指数
1
解决办法
1992
查看次数

python float值和c float值有什么区别?

我正在用两种不同的语言来回答同样的问题。得到了不同的结果。需要帮助以了解为什么会这样吗?

我用python编写了相同的代码,得到的结果与C预期的结果不同。

代码1:

{
  float f = 0.1;
  if (f == 0.1)
    printf("YES\n");
  else
    printf("NO\n");
  return 0;
}

Run Code Online (Sandbox Code Playgroud)

代码2:

f = float()
f = 0.1
if (f == 0.1):
    print("YES")
else:
    print("NO")
Run Code Online (Sandbox Code Playgroud)

两者必须提供与否相同的输出。但是只有C给出了预期的输出,而Python给出的是YES。

c python

1
推荐指数
1
解决办法
69
查看次数

如何在包含一系列浮点数的 Pandas 索引中找到缺失的行?

我有一个 CSV 文件,其中一列包含一系列具有 0.1 步长间隔的实数。但是,缺少某些值。我已将数据加载到 Pandas DataFrame 并将此列设置为索引。由于浮点数的表示方式,我很难识别缺失的索引值。我想找到丢失的行并用np.nan.

例如,给定

        A     B
0.0  78.4  65.9
0.1  72.9  29.2
0.3  80.7  45.9
0.4  10.9  82.3
0.5  37.7  85.4
0.6  90.4  69.9
0.7  17.0  57.2
0.8  70.0  49.6
1.0  58.6  65.1
Run Code Online (Sandbox Code Playgroud)

我想得到

        A     B
0.0  78.4  65.9
0.1  72.9  29.2
0.2   NaN   NaN
0.3  80.7  45.9
0.4  10.9  82.3
0.5  37.7  85.4
0.6  90.4  69.9
0.7  17.0  57.2
0.8  70.0  49.6
0.9   NaN   NaN
1.0  58.6  65.1
Run Code Online (Sandbox Code Playgroud)

我试过使用pandas.DataFrame.reindex,但由于浮点表示它不起作用。以下是我迄今为止尝试过的(我的数据范围更大):

        A …
Run Code Online (Sandbox Code Playgroud)

python pandas

1
推荐指数
1
解决办法
67
查看次数