[英]unsupported operand type(s) in python 3.6
假設我有一個熊貓數據框,並且想要打印具有不同值的兩個特定列( Score
和Score1
)的行。 我在 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.