pandas利用資料型別轉換節省記憶體空間

2021-09-26 13:29:36 字數 2352 閱讀 9712

df1 = pd.dataframe(

)>>

>

a b

01.0

12.0

12.0

321.0

23.0

23.0

30.0 nan

#獲取資料型別

df1.dtypes

>>

>

a float64

b float64

dtype:

object

#獲取dataframe的大小(單位位元組)

df1.memory_usage(

)>>

>

index 80

a 32

b 32

dtype: int64

# 利用astype進行資料型別的壓縮

df1 = df1.astype(np.float16)

df1.memory_usage(

)>>

>

index 80

a 8

b 8

dtype: int64

df1>>

>

a b

01.0

12.0

12.0

321.0

23.0

23.0

30.0 nan

想要做到自適應的轉換,首先需要知道某列的最大值和最小值,根據資料最大最小值的範圍,依次與numpy的資料型別最大值最小值進行比較,選定最合適的資料型別,進行轉換。

#獲取某個型別最大值和最小值方法

np.iinfo(np.int8)

>>

>

iinfo(

min=

-128

,max

=127

, dtype=int8)

np.iinfo(np.int8)

.max

>>

>

127np.finfo(np.float16)

>>

>

finfo(resolution=

0.001

,min=-

6.55040e+04

,max

=6.55040e+04

, dtype=float16)

np.finfo(np.float16)

.max

>>

>

65500.0

當數值型資料經過astype轉換後,其相關指標的計算結果,也會與轉換後的型別一致。

a = np.array([1

,2,3

,4])

a = a.astype(np.int8)

np.max

(a).dtype

>>

>

dtype(

'int8'

)

換句話說,如果只簡單的最大值最小值計算還好,一定在範圍之內,不會超出轉換後的資料型別的範圍,但是,在某些情況下,計算結果大大超過了資料型別的範圍後,就會變成np.inf

當類別型資料經過astype,轉換成category後,想要在進行缺失值的填補就會報錯。

df = pd.dataframe(

)df[

'a']

= df[

'a']

.astype(

'category')df

>>

>

a0 a

1 b

2 nan

df.fillna(

'c')

>>

>

valueerror: fill value must be in categories

需要採用以下方式進行填補:

df[

'a']

= df[

'a']

.cat.add_categories(

'asdasd'

)df[

'a']

.fillna(

'asdasd'

)>>

>

0 a

1 b

2 asdasd

name: a, dtype: category

categories (3,

object):

[a, b, asdasd]

pandas 資料型別 Series

首先載入庫 import numpy as np import pandas as pdpython list列表建立series a pd.series 1,2,3,4 預設索引 b pd.series 1,2,3,4 index a b c d 自定義索引 s pd.series true,1,...

資料處理之Pandas中資料型別轉換

pandas中進行資料型別轉換有二種基本方法 舉例資料 import numpy as np import pandas as pd data pd.read csv data.csv encoding gbk 因為資料中含有中文資料 1.使用astype 函式進行強制型別轉換 data 客戶編號 ...

資料型別 型別轉換

這樣的語句將報錯,因為char型別精度低於int型別,編譯器無法將其自動轉換,只能進行強制轉換 int x 65 char ch char x 舉例1 int age 19 char 女 char result age int 不可以自動轉換成char 精度損失 舉例2 int a 10 int b...