Python 表16转换
我正试图优化我的df数据类型以消耗更少的内存 我提出了以下浮点数解决方案: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
@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
函数中的逻辑在哪里失败了?很长一段时间后,我在这里问你,你设法解决了这个问题,我试图解决一个非常类似的问题。很长一段时间后,我在这里问你,你设法解决了这个问题,我试图解决一个非常类似的问题。