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...