簡體   English   中英

python 3.6 中不支持的操作數類型

[英]unsupported operand type(s) in python 3.6

假設我有一個熊貓數據框,並且想要打印具有不同值的兩個特定列( ScoreScore1 )的行。 我在 python 3.6 上運行

我試過

print(Data[round(Data['Score'],4)!=round(Data['Score1'],4)])

並收到此錯誤:

* 不支持的操作數類型:'decimal.Decimal' 和 'float'

我也試過

from decimal import *
print(Data[Decimal(round(Data['Score'],4))!=round(Data['Score1'],4)])

並得到:

不支持從系列到十進制的轉換


Here is some sample data
              Score             Score1
0        0.00187718  0.001877000000000
1       0.000184217  0.000184000000000
2       0.000502648  0.000503000000000
3          0.185124  0.185124000000000
4        3.3589e-05  0.000034000000000
5        0.00156229  0.001562000000000
6        6.4937e-05  0.000065000000000
7       4.87503e-05  0.000049000000000
8        0.00215561  0.002156000000000
9       3.22308e-05  0.000044000000000
10      3.70668e-05  0.000037000000000
11      0.000100837  0.000101000000000
12      7.91073e-05  0.000079000000000
13       0.00424232  0.004232000000000
14      6.80564e-06  0.000007000000000
15       0.00928687  0.009287000000000

我現在的解決方案是將數據幀輸出到 csv 並將 csv 重新加載到 python 中。 對我來說看起來不錯。 知道這絕對不是一個聰明的方法,鑒於我的時間緊迫,我會繼續使用它。

以下是比較浮動值的一些其他常用方法。 它們與您實施的不等價,但在許多情況下仍然應該很好。

使用原生pandas

selected = data[(data["Score"]-data["Score1"]).abs() >= 1e-4]
print(selected)

使用numpy.isclose

import numpy as np

selected = data[~np.isclose(data["Score"], data["Score1"], 0, 1e-4)]
print(selected)

您似乎正在比較兩個數字(浮點數四舍五入到某個小數位)。 我想你可以試試這個(比較a和b)

a = 0.00542
b = 0.00534
decimal_place = 4 #or any place you want
round(a-b, decimal_place) # if this is zero, consider a and b as the same 

由於我不知道你有什么樣的數據,我無法為你在 Pandas 中實現。 這是我看到你的問題時想到的。 希望它能幫到你。

獲取數據文件后更新:

import pandas as pd

filename = "datafile"

df = pd.read_csv(filename, delim_whitespace = True)
print(df)
print(df.columns)
df["Compare"] = (round(df["Score"] - df["Score1"], 6) == 0)
print(df)

不知何故,我的代碼運行順利(將您的數據復制到名為“datafile”的文件后)。 我計划運行您的代碼並找出原因。

不幸的是,在將您的代碼插入我的代碼后,我仍然找不到為什么它不起作用。 運行似乎很好:

import pandas as pd

filename = "datafile"

df = pd.read_csv(filename, delim_whitespace = True)
print(df)
print(df.columns)
print(round(df['Score'],4)!=round(df['Score1'],4))
#print(df[round(df['Score'],4)!=round(df['Score1'],4)])
#I delete the df[] around the round...4)

這是輸出

0     False
1     False
2     False
3     False
4     False
5     False
6     False
7     False
8     False
9     False
10    False
11    False
12    False
13    False
14    False
15    False
dtype: bool

我猜你沒有以正確的方式讀入文件。 我建議打印出數據框以了解原因。 祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM