首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pandas to_numeric(…,downcast='float')失去精度

pandas to_numeric(…,downcast='float')失去精度
EN

Stack Overflow用户
提问于 2020-04-20 02:31:39
回答 1查看 547关注 0票数 1

将pandas数据帧(按列)从float64向下转换为float32会导致精度下降,即使最大(9.761140e+02)和最小(0.000000e+00)元素适用于float32。

数据集非常大,5500万行乘以12列。这是没有向下转换的特定列的平均值(1.343987e+00),后面是这个1.224472e+00。

我在np.astype()上得到了同样的结果。

EN

回答 1

Stack Overflow用户

发布于 2020-04-20 08:03:55

这是一个非常有趣的问题。我测试了几个数据帧,从100万条记录到5500万条记录,大小与您的相同,使minmax的值与您拥有的值相似。

代码语言:javascript
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

x, y = [], []
for idx, num in enumerate(range(1, 57, 2)):
    print(f"{idx+1}) Testing with {num} million records...")
    rows = num*(10**6)
    cols = ['col']

    df = pd.DataFrame(np.random.uniform(0, 9.761140e+02, size=(rows, len(cols))), columns=cols)
    df['col1'] = pd.to_numeric(df['col'], downcast='float')
    df['diff'] = df['col'] - df['col1']

    diff = df['col'].mean() - df['col1'].mean()

    x.append(num)
    y.append(diff)

plt.plot(x, y, 'ro')
plt.xlabel('number of rows (millions)')
plt.ylabel('precision value lost')
plt.show()

这就是情节。

根据曲线图,似乎在3500万条记录之后,精度的损失突然增加,并且看起来是对数性质的。我还没有弄明白为什么会是这样。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61309590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档