为什么pandas会低效地将列推断为int64
int64
效率低下。这只是
违约
dtype
对于数值,它避免了将列重新转换为更高精度时的冗余,这是通过检查
每一个
列中的值,以便分配适当的
数据类型
为什么他们用这种方式来实施,而不是说
integer
或
float32
? 因为如果列中的任何值超过该默认精度,则需要将整个列重新转换为更高的精度,为此需要检查列中的每个值。因此,从一开始就假设精度更高,而不是检查每个值并重新计算等,这样冗余度和成本更低。
数据类型
对于构造器。
他们能够降到int32而不损失精度?
你搞错了。显然精度没有损失,但如果你检查一下
genotype_data_df.dtypes
,您将看到它们没有被转换为较低的精度(整数),实际上它们仍然是
float64
.
>> a = np.matrix('0.1 0.2; 0.3 0.4')
>> a_df = DF(list(map(np.ravel, a)), dtype=None)
>> genotype_data_df = a_df.apply(pd.to_numeric, downcast='integer')
>> genotype_data_df.dtypes
0 float64
1 float64
dtype: object