You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用Pandas绘制Decimal类型超长数值的报错解决方法

解决Pandas中Decimal类型数据绘图报错问题

报错TypeError: no numeric data to plot的核心原因是:matplotlib不支持直接绘制decimal.Decimal类型的数据,Pandas的plot方法依赖matplotlib,因此无法识别该类型为数值数据。

以下是几种可行的解决方法:

方法一:转换为Python原生数值类型

如果你的数值在float精度范围内(不会丢失精度),可以直接将Decimal列转换为float类型:

import pandas as pd
import matplotlib.pyplot as plt
import decimal as dec

obs={}
dec.getcontext().prec=10
obs['x']=[dec.Decimal(1),dec.Decimal(2),dec.Decimal(3)]
obs['y']=[dec.Decimal(1),dec.Decimal(2),dec.Decimal(3)]
df=pd.DataFrame(data=obs)

# 转换Decimal列为float类型
df['x'] = df['x'].apply(lambda x: float(x))
df['y'] = df['y'].apply(lambda x: float(x))

df.plot(x='x',y='y',marker='*')
plt.show()

方法二:使用pd.to_numeric批量转换

pd.to_numeric可以自动识别Decimal类型并转换为合适的数值类型,写法更简洁:

import pandas as pd
import matplotlib.pyplot as plt
import decimal as dec

obs={}
dec.getcontext().prec=10
obs['x']=[dec.Decimal(1),dec.Decimal(2),dec.Decimal(3)]
obs['y']=[dec.Decimal(1),dec.Decimal(2),dec.Decimal(3)]
df=pd.DataFrame(data=obs)

# 批量转换所有Decimal列为数值类型
df = df.apply(pd.to_numeric)

df.plot(x='x',y='y',marker='*')
plt.show()

方法三:针对超长科学计数法的高精度转换

如果处理的超长科学计数法数值超出float精度范围,可以转换为numpy的longdouble类型以保留更高精度:

import pandas as pd
import matplotlib.pyplot as plt
import decimal as dec
import numpy as np

obs={}
dec.getcontext().prec=20
obs['x']=[dec.Decimal('1e300'),dec.Decimal('2e300'),dec.Decimal('3e300')]
obs['y']=[dec.Decimal('1e300'),dec.Decimal('2e300'),dec.Decimal('3e300')]
df=pd.DataFrame(data=obs)

# 转换为numpy longdouble类型
df['x'] = df['x'].apply(lambda x: np.longdouble(x))
df['y'] = df['y'].apply(lambda x: np.longdouble(x))

df.plot(x='x',y='y',marker='*')
plt.show()

内容的提问来源于stack exchange,提问作者Stéphane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:10:30