将pandas数据帧(按列)从float64向下转换为float32会导致精度下降,即使最大(9.761140e+02)和最小(0.000000e+00)元素适用于float32。
数据集非常大,5500万行乘以12列。这是没有向下转换的特定列的平均值(1.343987e+00),后面是这个1.224472e+00。
我在np.astype()上得到了同样的结果。
发布于 2020-04-20 08:03:55
这是一个非常有趣的问题。我测试了几个数据帧,从100万条记录到5500万条记录,大小与您的相同,使min、max的值与您拥有的值相似。
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万条记录之后,精度的损失突然增加,并且看起来是对数性质的。我还没有弄明白为什么会是这样。
https://stackoverflow.com/questions/61309590
复制相似问题