Python 表16转换

Python 表16转换,python,pandas,Python,Pandas,我正试图优化我的df数据类型以消耗更少的内存 我提出了以下浮点数解决方案: @staticmethod def optimize_float(series): low_consumption = series.astype('float16') if any(low_consumption.isin([np.inf])): medium_consumption = series.astype('float32') if any(medium_con

我正试图优化我的df数据类型以消耗更少的内存

我提出了以下浮点数解决方案:

@staticmethod
def optimize_float(series):
    low_consumption = series.astype('float16')
    if any(low_consumption.isin([np.inf])):
        medium_consumption = series.astype('float32')
        if any(medium_consumption.isin([np.inf])):
            return series.astype('float64')
        return medium_consumption
    return low_consumption
我遇到了一个奇怪的用例,如下所示:

In[89]: df = pd.DataFrame({'a':[11111,22222,3333]})
In[90]: df
Out[90]: 
       a
0  11111
1  22222
2   3333
In[91]: df.astype('float16')
Out[91]: 
         a
0  11112.0
1  22224.0
2   3332.0
In[92]: df.astype('float32')
Out[92]: 
         a
0  11111.0
1  22222.0
2   3333.0
当转换为
float16
时,它向上取整\更改了我系列中的值,而我希望它将
inf
放入,如果它无法将其转换为我传递的数据类型,则抛出错误

我还注意到该df的descripe()方法输出中的差异:

In[83]: df = pd.DataFrame({'a':[11111,22222,3333]})
In[84]: df['a'].describe()
Out[84]: 
count        3.000000
mean     12222.000000
std       9493.383011
min       3333.000000
25%       7222.000000
50%      11111.000000
75%      16666.500000
max      22222.000000
Name: a, dtype: float64
In[85]: df['a'].astype('float16').describe()
Out[85]: 
count    3.000000e+00
mean     1.222400e+04
std               inf
min      3.332000e+03
25%      7.222000e+03
50%      1.111200e+04
75%      1.666800e+04
max      2.222400e+04
Name: a, dtype: float64
如何在不丢失/更改任何数据的情况下将系列转换为消耗最少的内存类型


我在
optimize\u float
函数中的逻辑在哪里失败了?

很长一段时间后,我在这里问你,你设法解决了这个问题,我试图解决一个非常类似的问题。很长一段时间后,我在这里问你,你设法解决了这个问题,我试图解决一个非常类似的问题。