我在熊猫中有一些数据,我试图保存为32位浮点数,但我总是得到64位浮点数。我最好的尝试是:
df['store'] = pd.DataFrame(data).astype(float32)
但它不起作用..任何想法?
答案 0 :(得分:0)
延伸接受的答案。请注意,如果内存受限制或您想要更多空间,则可以选择df['a'].astype(np.float32)
作为答案,或同等替换np.float16
,或np.float64
代替数字,np.int16
,{{ 1}},np.int32
表示整数,如果您的应用程序的准确性很好,您可以将许多应用程序转移到np.int64
/ int16
并缩小数据占用空间。
答案 1 :(得分:0)
我不得不将所有数字列转换为 32 位,并且单独进行是不可扩展的。这是使用 pd.to_numeric -
的另一种方法# Creating an example DF
int_values = [1, 2, 3, 4, 5]
text_values = ["alpha", "beta", "gamma", "delta", "epsilon"]
float_values = [0.0, 0.25, 0.5, 0.75, 1.0]
df = pd.DataFrame({
"int_col": int_values,
"text_col": text_values,
"float_col": float_values
})
print(df)
int_col text_col float_col
0 1 alpha 0.00
1 2 beta 0.25
2 3 gamma 0.50
3 4 delta 0.75
4 5 epsilon 1.00
df1 = df.apply(
func=lambda x: pd.to_numeric(arg=x, errors="ignore", downcast="float"),
axis=0)
print(df1)
int_col text_col float_col
0 1.0 alpha 0.00
1 2.0 beta 0.25
2 3.0 gamma 0.50
3 4.0 delta 0.75
4 5.0 epsilon 1.00
您可以使用 pd.info()
检查原始 df 和转换后的 df2print(df.info(), df1.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 int_col 5 non-null int64 <--
1 text_col 5 non-null object
2 float_col 5 non-null float64 <--
dtypes: float64(1), int64(1), object(1)
memory usage: 248.0+ bytes
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 int_col 5 non-null float32 <--
1 text_col 5 non-null object
2 float_col 5 non-null float32 <--
dtypes: float32(2), object(1)
memory usage: 208.0+ bytes
None None