準備:檢視所佔記憶體函式
def
mem_usage
(pandas_obj):if
isinstance
(pandas_obj,pd.dataframe)
: usage_b = pandas_obj.memory_usage(deep=
true).
sum(
)else
: usage_b = pandas_obj.memory_usage(deep=
true
) usage_mb = usage_b/
1024**2
return
'mb'
.format
(usage_mb)
1.高精度向低精度轉換
#降低幾個數量級
gl_int = gl.select_dtypes(include =
['int64'])
converted_int = gl_int.
(pd.to_numeric,downcast=
'unsigned'
)
#降低一半記憶體
gl_int = gl.select_dtypes(include =
['float64'])
converted_float = gl_int.
(pd.to_numeric,downcast=
'float'
)
2.將object轉換為category,只有重複資料比較多的時候才能真正節約記憶體
#重複字串指向同一塊記憶體,object-》category
converted_obj = pd.dataframe(
)for col in gl_obj.columns:
num_unique_values =
len(gl_obj[col]
.unique())
num_total_values =
len(gl_obj[col]
)if num_unique_values / num_total_values<
0.5:
converted_obj.loc[
:,col]
= gl_obj[col]
.astype(
'category'
)else
: converted_obj.loc[
:,col]
= gl_obj[col]
3.分塊讀取,防止記憶體溢位
import pandas as pd
# 由於資料量較大,一次性讀入可能造成記憶體錯誤(memmory error),因而使用pandas的分塊讀取
defread_from_local
(file_name, chunk_size=
50000):
reader = pd.read_csv(file_name, header=
0, iterator=
true
, encoding=
"utf-8"
) chunks =
loop =
true
while loop:
try:
chunk = reader.get_chunk(chunk_size)
except stopiteration:
loop =
false
print
("iteration is stopped!"
)# 將塊拼接為pandas dataframe格式
df_ac = pd.concat(chunks, ignore_index=
true
)return df_ac
pandas 資料處理
pandas中資料可以分為series,dataframe,panel分別表示一維至三維資料。其中在構造時,index表示行名,columns表示列名 構造方式 s pd.series data index index s pd series np random randn 5 index a b ...
pandas資料處理
dataframe.duplicated subset none,keep first 判斷dataframe中的資料是否有重複 必須一行中所有資料都重複才算重複,只能判斷行,不能判斷列 返回series dataframe.drop duplicates subset none,keep firs...
Pandas資料處理
資料處理 pandas from sklearn.preprocessing import minmaxscaler data 1,2 0.5,6 0.10 1,18 將 numpy 轉換成 pd 表 pd.dataframe data 歸一化 0,1 之間 scaler minmaxscaler ...