pandas 大資料處理

2021-10-23 15:43:13 字數 1977 閱讀 9580

準備:檢視所佔記憶體函式

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