TypeError: ("unsupported operand type(s) for -: 'decimal.Decimal' and 'float'", 'occurred at index growth(%)')
TypeError: ("unsupported operand type(s) for -: 'decimal.Decimal' and 'float'", 'occurred at index growth(%)')
这是我的数据框 --
c2_name Q1_GMV Q2_GMV growth(%)
0 A 1170727260 221801763 -81
1 B 1604716749 829186592 -48
2 C 661473481 553698141 -16
我正在尝试使用 pandas 样式将 CSS 添加到数据帧输出。
# Set colormap equal to seaborns light green color palette
cm = sns.light_palette("green", as_cmap=True)
(df.style
.background_gradient(cmap=cm, subset=['growth(%)'])
.set_caption('This is a custom caption.')
.set_table_styles(styles))
但是出现这个错误
TypeError: ("unsupported operand type(s) for -: 'decimal.Decimal' and 'float'", 'occurred at index growth(%)')
试着让它看起来像这样
here
您使用 Decimal
而不是浮动有什么特殊原因吗?这似乎是你问题的根源。在上面的示例中,鉴于该列中的值,完全没有必要。您可以通过以下方式解决您的问题:
df['growth(%)'] = df['growth(%)'].astype('float')
示例:
from decimal import Decimal
import seaborn as sns
cm = sns.light_palette("green", as_cmap=True)
print(df)
# c2_name Q1_GMV Q2_GMV growth(%)
#0 A 1170727260 221801763 -81.0
#1 B 1604716749 829186592 -48.0
#2 C 661473481 553698141 -16.0
df.dtypes
#c2_name object
#Q1_GMV int64
#Q2_GMV int64
#growth(%) float64
#Add a decimal type to the `df` to reproduce your error.
df.loc[2, 'growth(%)'] = Decimal(2.1511231)
# Now styling will throw an error:
(df.style
.background_gradient(cmap=cm, subset=['growth(%)'])
.set_caption('This is a custom caption.'))
TypeError: ("unsupported operand type(s) for -: 'decimal.Decimal' and
'float'", 'occurred at index growth(%)')
# Make the Decimals into floats
df['growth(%)'] = df['growth(%)'].astype('float')
(df.style
.background_gradient(cmap=cm, subset=['growth(%)'])
.set_caption('This is a custom caption.'))
如果您需要保留 Decimal
类型,请考虑编写一个仅转换类型以进行样式设置和显示的函数。
这是我的数据框 --
c2_name Q1_GMV Q2_GMV growth(%)
0 A 1170727260 221801763 -81
1 B 1604716749 829186592 -48
2 C 661473481 553698141 -16
我正在尝试使用 pandas 样式将 CSS 添加到数据帧输出。
# Set colormap equal to seaborns light green color palette
cm = sns.light_palette("green", as_cmap=True)
(df.style
.background_gradient(cmap=cm, subset=['growth(%)'])
.set_caption('This is a custom caption.')
.set_table_styles(styles))
但是出现这个错误
TypeError: ("unsupported operand type(s) for -: 'decimal.Decimal' and 'float'", 'occurred at index growth(%)')
试着让它看起来像这样
here
您使用 Decimal
而不是浮动有什么特殊原因吗?这似乎是你问题的根源。在上面的示例中,鉴于该列中的值,完全没有必要。您可以通过以下方式解决您的问题:
df['growth(%)'] = df['growth(%)'].astype('float')
示例:
from decimal import Decimal
import seaborn as sns
cm = sns.light_palette("green", as_cmap=True)
print(df)
# c2_name Q1_GMV Q2_GMV growth(%)
#0 A 1170727260 221801763 -81.0
#1 B 1604716749 829186592 -48.0
#2 C 661473481 553698141 -16.0
df.dtypes
#c2_name object
#Q1_GMV int64
#Q2_GMV int64
#growth(%) float64
#Add a decimal type to the `df` to reproduce your error.
df.loc[2, 'growth(%)'] = Decimal(2.1511231)
# Now styling will throw an error:
(df.style
.background_gradient(cmap=cm, subset=['growth(%)'])
.set_caption('This is a custom caption.'))
TypeError: ("unsupported operand type(s) for -: 'decimal.Decimal' and 'float'", 'occurred at index growth(%)')
# Make the Decimals into floats
df['growth(%)'] = df['growth(%)'].astype('float')
(df.style
.background_gradient(cmap=cm, subset=['growth(%)'])
.set_caption('This is a custom caption.'))
如果您需要保留 Decimal
类型,请考虑编写一个仅转换类型以进行样式设置和显示的函数。