pandas之關(guān)于DataFrame數(shù)據(jù)類型超好用的方法
參考資料:pandas官方參考文檔
本文詳細(xì)介紹了pandas中關(guān)于DataFrame數(shù)據(jù)類型的常用函數(shù)及其使用方法,結(jié)合了pandas給出的官方文檔,佐以簡單示例,萬字長文助您一文搞定DataFrame相關(guān)的api調(diào)用問題。
在使用pandas包中的函數(shù)時(shí)默認(rèn)已經(jīng)執(zhí)行語句import pandas as pd
和import numpy as np
以調(diào)用pandas包和numpy包。
DataFrame數(shù)據(jù)類型
DataFrame是在python中獨(dú)有的一種數(shù)據(jù)類型,它是一種二維的、大小可變的、有潛在異構(gòu)的表格型數(shù)據(jù)。
Constructor構(gòu)造
DataFrame([data, index, columns,dtype, copy])
Attributes屬性
這里只介紹常用的api,如需了解其它的,請參考文章頂部參考鏈接。
Axes軸函數(shù)
- df.index:返回行標(biāo)簽;
- df.columns:返回列標(biāo)簽;注意這兩處都沒有括號,且列標(biāo)簽要求有s;
- df.dtypes:返回df的dtypes;
- df.info(): 返回對于df的信息概述,如:
df.values:返回二維np數(shù)組的形式的df,如:
df.size:求出df中的元素?cái)?shù)量,如上圖df的size即為4;
df.shape:以元組的形式返回df的形狀,如下圖中data的形狀即為4909行,16列;
conversion轉(zhuǎn)換函數(shù)
1.DataFrame.astype(dtype[, copy, errors])
作用:將一個(gè)df轉(zhuǎn)換成指定的類型;
格式:df.astype('int32')
示例:
注意:不通過賦值不會存儲轉(zhuǎn)換結(jié)果,即執(zhí)行完df.astype(‘int8’)之后如果直接執(zhí)行df.dtypes返回的結(jié)果仍是int64;
2.DataFrame.convert_dtypes([infer_objects, …])
作用:將df中的列自動轉(zhuǎn)換成最可能適配的類型,并且使用的dtype都是支持pd.NA的;即把用戶自定義的類型轉(zhuǎn)換成python語言中最適配的數(shù)據(jù)類型,并把np.nan轉(zhuǎn)換為pd.NA;
即把用戶自定義的類型轉(zhuǎn)換成python語言中最適配的數(shù)據(jù)類型,并把np.nan轉(zhuǎn)換為pd.NA;
3.DataFrame.infer_objects()
作用:嘗試為列類型為object的列推斷更好的數(shù)據(jù)類型;
與convert_dtypes()的區(qū)別:infer_objects()只針對類型為object的列,而convert_dtypes()針對所有的列;
4.DataFrame.copy([deep])
作用:復(fù)制一個(gè)df;
格式:df_new = df.copy()
示例:
Indexing, iteration索引、遍歷函數(shù)
1.df.head([n])
作用:返回前n行數(shù)據(jù),默認(rèn)為5
2.df.at
作用:按標(biāo)簽返回行列對的單個(gè)值
格式:df.at[row_label, col_label]
示例:
3.df.iat
作用:按索引返回行列對的單個(gè)值
示例:
4.df.loc
作用:通過標(biāo)簽或布爾數(shù)組訪問一行或多行或一行列對(不是只能行列對哦!)
格式:df.loc[row_label]
或df.loc[row_label, col_label]
或df.loc[[row1_label, row2_label,...]]
注意:不能取一列數(shù)據(jù)
示例:
5.df.iloc
作用:通過索引或布爾數(shù)組訪問一行或多行或一行列對(不是只能行列對哦?。?/p>
格式:df.iloc[row_label]
或df.loc[row_label, col_label]
或df.loc[[row1_label, row2_label,...]]
注意:不能取一列數(shù)據(jù)
DataFrame的構(gòu)造轉(zhuǎn)換函數(shù):pd.DataFrame()
作用:將data轉(zhuǎn)換成dataframe的數(shù)據(jù)類型;
格式:
pd.DataFrame(data = None, index = None, columns = None, dtype = None, copy = None)
參數(shù):
- data:需要轉(zhuǎn)換位dataframe格式的原數(shù)據(jù)
- index:行標(biāo)簽列表
- columns:列標(biāo)簽列表
- dtype:數(shù)據(jù)類型列表
示例:
DataFrame的聚合函數(shù)、應(yīng)用函數(shù)
df.apply() 或 df.applymap()
作用:對于df執(zhí)行某函數(shù) 或 對df的所有元素執(zhí)行某函數(shù)
格式:
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs) df.applymap(func[, na_action])
參數(shù):
func:欲施加給某行或者某列的函數(shù)
axis:{0 or ‘index’, 1 or ‘columns’}, default 0即為對列實(shí)施函數(shù)
- 0 or ‘index’: 對某列(的每行)實(shí)施函數(shù)
- 1 or ‘columns’: 對某行中(的每列)實(shí)施函數(shù)
raw:一個(gè)布爾值, default False,決定了一行或列的數(shù)據(jù)類型是以series還是ndarray object的形式傳入函數(shù)
- False : 以series為數(shù)據(jù)類型傳入?yún)?shù)
- True : 以ndarray objects為數(shù)據(jù)類型傳入?yún)?shù),如果函數(shù)是基于numpy包實(shí)現(xiàn)的時(shí)候有更好的表現(xiàn)
示例:
np自帶的函數(shù):
lambda函數(shù):
df.aggregate()或df.agg()
作用: 對所有行或所有列做一項(xiàng)或多項(xiàng)聚合操作(兩種形式的函數(shù)效果一模一樣);
格式:
DataFrame.aggregate(func=None, axis=0, *args, **kwargs)
示例:
df.transform()
作用:對df每個(gè)元素調(diào)用函數(shù);
與df.apply()的區(qū)別:在調(diào)用一個(gè)普通函數(shù)的時(shí)候沒有區(qū)別,調(diào)用聚合函數(shù)時(shí)有區(qū)別,調(diào)用多個(gè)函數(shù)時(shí)也有區(qū)別。(個(gè)人理解transform只能對每個(gè)元素都進(jìn)行操作,選擇axis參數(shù)的意義不大)
格式:
DataFrame.transform(func, axis=0, *args, **kwargs)
示例:
只調(diào)用一個(gè)函數(shù):
同時(shí)調(diào)用多個(gè)lambda函數(shù):
transform只顯示最后一個(gè)lambda函數(shù)的執(zhí)行結(jié)果,而apply會把每個(gè)執(zhí)行結(jié)果都顯示出來;同時(shí)調(diào)用多個(gè)聚合函數(shù):(部分函數(shù)只能使用apply函數(shù))
np.mean, np.sum等只能用apply :
np.sqrt, np.exp等兩種函數(shù)都能使用:
sum等聚合函數(shù)在df.transform中要與groupby配合使用:
而df.transform(‘sum’)和df.transform(np.sum)都將報(bào)錯;
總結(jié):對于df執(zhí)行函數(shù)時(shí)的情況復(fù)雜,如果不是對普通函數(shù)建議直接使用apply(),使用聚合函數(shù)時(shí)考慮實(shí)際情況選擇需要調(diào)用的api。(需要groupby分區(qū)時(shí)用transform())
df.groupby()
作用:在對數(shù)據(jù)做聚合操作前給數(shù)據(jù)分組
格式:
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, observed=False, dropna=True)
主要參數(shù):
by:mapping, function, label, or list of labels
用于確定 groupby 的組:
- 如果 by 是一個(gè)函數(shù),它會在對象索引的每個(gè)值上調(diào)用。
- 如果傳遞了 dict 或 Series,則 Series 或 dict VALUES 將用于確定分組規(guī)則。
- 如果傳遞了 ndarray,則按原樣使用這些值來確定組。
- 標(biāo)簽或標(biāo)簽列表可以通過 self 中的列傳遞給 group。
- 請注意,元組被解釋為(單個(gè))鍵。
axis:{0 or ‘index’, 1 or ‘columns’}, default 0
與其余函數(shù)的規(guī)則一致;
as_index:bool, default True
對于聚合輸出,返回帶有組標(biāo)簽的對象作為索引。 僅與 DataFrame 輸入相關(guān)。 as_index=False 是有效的“SQL 風(fēng)格”分組輸出。
sort:bool, default True
對組鍵進(jìn)行排序。 關(guān)閉此功能可獲得更好的性能。 請注意,這不會影響每個(gè)組內(nèi)的觀察順序。 Groupby 保留每個(gè)組中行的順序。
group_keys:bool, default True
調(diào)用apply時(shí),將組鍵添加到索引以識別片段。
dropna:bool, default True
如果為 True,并且組鍵包含 NA 值,則 NA 值和行/列將被刪除。 如果為 False,NA 值也將被視為組中的鍵。
示例:
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python下函數(shù)參數(shù)的傳遞(參數(shù)帶星號的說明)
python中函數(shù)參數(shù)的傳遞是通過賦值來傳遞的。2010-09-09使用Python實(shí)現(xiàn)WebSocket服務(wù)器與客戶端通信功能
WebSocket?是一種基于?TCP?協(xié)議的通信協(xié)議,能夠在客戶端與服務(wù)器之間進(jìn)行全雙工(雙向)通信,相比傳統(tǒng)的?HTTP?協(xié)議,WebSocket?可以實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)的傳輸,我通過?Python?實(shí)現(xiàn)一個(gè)簡單的?WebSocket?服務(wù)器,并使其與客戶端進(jìn)行通信,需要的朋友可以參考下2024-12-12django 利用Q對象與F對象進(jìn)行查詢的實(shí)現(xiàn)
這篇文章主要介紹了django 利用Q對象與F對象進(jìn)行查詢的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05PyCharm在win10的64位系統(tǒng)安裝實(shí)例
給大家介紹一下在win10的64位系統(tǒng)中安裝PyCharm的操作過程以及需要注意的地方。2017-11-11Python Tkinter GUI編程實(shí)現(xiàn)Frame切換
本文主要介紹了Python Tkinter GUI編程實(shí)現(xiàn)Frame切換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04wxPython學(xué)習(xí)之主框架實(shí)例
這篇文章主要介紹了wxPython學(xué)習(xí)之主框架應(yīng)用實(shí)例,以一個(gè)基礎(chǔ)的彈出窗體實(shí)例講述了wxPython主框架應(yīng)用程序的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-09-09