分享20個Pandas短小精悍的數(shù)據(jù)操作
1. ExcelWriter
很多時候dataframe里面有中文,如果直接輸出到csv里,中文將顯示亂碼。而Excel就不一樣了,ExcelWriter是pandas的一個類,可以使dataframe數(shù)據(jù)框直接輸出到excel文件,并可以指定sheets名稱。
df1?=?pd.DataFrame([["AAA",?"BBB"]],?columns=["Spam",?"Egg"])
df2?=?pd.DataFrame([["ABC",?"XYZ"]],?columns=["Foo",?"Bar"])
with?ExcelWriter("path_to_file.xlsx")?as?writer:
????df1.to_excel(writer,?sheet_name="Sheet1")
????df2.to_excel(writer,?sheet_name="Sheet2")
如果有時間變量,輸出時還可以date_format指定時間的格式。另外,它還可以通過mode設(shè)置輸出到已有的excel文件中,非常靈活。
with?ExcelWriter("path_to_file.xlsx",?mode="a",?engine="openpyxl")?as?writer:
????df.to_excel(writer,?sheet_name="Sheet3")
2. pipe
pipe管道函數(shù)可以將多個自定義函數(shù)裝進同一個操作里,讓整個代碼更簡潔,更緊湊。
比如,我們在做數(shù)據(jù)清洗的時候,往往代碼會很亂,有去重、去異常值、編碼轉(zhuǎn)換等等。如果使用pipe,將是這樣子的。
diamonds?=?sns.load_dataset("diamonds")
df_preped?=?(diamonds.pipe(drop_duplicates).
??????????????????????pipe(remove_outliers,?['price',?'carat',?'depth']).
??????????????????????pipe(encode_categoricals,?['cut',?'color',?'clarity'])
????????????)
兩個字,干凈!
3. factorize
factorize這個函數(shù)類似sklearn中LabelEncoder,可以實現(xiàn)同樣的功能。
#?Mind?the?[0]?at?the?end diamonds["cut_enc"]?=?pd.factorize(diamonds["cut"])[0] >>>?diamonds["cut_enc"].sample(5) 52103????2 39813????0 31843????0 10675????0 6634?????0 Name:?cut_enc,?dtype:?int64
區(qū)別是,factorize返回一個二值元組:編碼的列和唯一分類值的列表。
codes,?unique?=?pd.factorize(diamonds["cut"],?sort=True) >>>?codes[:10] array([0,?1,?3,?1,?3,?2,?2,?2,?4,?2],?dtype=int64) >>>?unique ['Ideal',?'Premium',?'Very?Good',?'Good',?'Fair']
4. explode
explode爆炸功能,可以將array-like的值比如列表,炸開轉(zhuǎn)換成多行。
data?=?pd.Series([1,?6,?7,?[46,?56,?49],?45,?[15,?10,?12]]).to_frame("dirty")
data.explode("dirty",?ignore_index=True)

5. squeeze
很多時候,我們用.loc篩選想返回一個值,但返回的卻是個series。其實,只要使用.squeeze()即可完美解決。比如:
#?沒使用squeeze
subset?=?diamonds.loc[diamonds.index?<?1,?["price"]]
#?使用squeeze
subset.squeeze("columns")

可以看到,壓縮完結(jié)果已經(jīng)是int64的格式了,而不再是series。
6. between
dataframe的篩選方法有很多,常見的loc、isin等等,但其實還有個及其簡潔的方法,專門篩選數(shù)值范圍的,就是between,用法很簡單。
diamonds[diamonds["price"]\ ??????.between(3500,?3700,?inclusive="neither")].sample(5)

7. T
這是所有的dataframe都有的一個簡單屬性,實現(xiàn)轉(zhuǎn)置功能。它在顯示describe時可以很好的搭配。
boston.describe().T.head(10)

8. pandas styler
pandas也可以像excel一樣,設(shè)置表格的可視化條件格式,而且只需要一行代碼即可(可能需要一丟丟的前端HTML和CSS基礎(chǔ)知識)。
>>>?diabetes.describe().T.drop("count",?axis=1)\
?????????????????.style.highlight_max(color="darkred")

當然了,條件格式有非常多種。
9. Pandas options
pandas里提供了很多宏設(shè)置選項,被分為下面5大類。
dir(pd.options) ['compute',?'display',?'io',?'mode',?'plotting']
一般情況下使用display會多一點,比如最大、最小顯示行數(shù),畫圖方法,顯示精度等等。
pd.options.display.max_columns?=?None pd.options.display.precision?=?5
10. convert_dtypes
經(jīng)常使用pandas的都知道,pandas對于經(jīng)常會將變量類型直接變成object,導致后續(xù)無法正常操作。這種情況可以用convert_dtypes進行批量的轉(zhuǎn)換,它會自動推斷數(shù)據(jù)原來的類型,并實現(xiàn)轉(zhuǎn)換。
sample?=?pd.read_csv( ????"data/station_day.csv", ????usecols=["StationId",?"CO",?"O3",?"AQI_Bucket"], ) >>>?sample.dtypes StationId??????object CO????????????float64 O3????????????float64 AQI_Bucket?????object dtype:?object >>>?sample.convert_dtypes().dtypes StationId??????string CO????????????float64 O3????????????float64 AQI_Bucket?????string dtype:?object
11. select_dtypes
在需要篩選變量類型的時候,可以直接用selec _dtypes,通過include和exclude篩選和排除變量的類型。
#?選擇數(shù)值型的變量 diamonds.select_dtypes(include=np.number).head() #?排除數(shù)值型的變量 diamonds.select_dtypes(exclude=np.number).head()
12. mask
mask可以在自定義條件下快速替換單元值,在很多三方庫的源碼中經(jīng)常見到。比如下面我們想讓age為50-60以外的單元為空,只需要在con和ohter寫好自定義的條件即可。
ages?=?pd.Series([55,?52,?50,?66,?57,?59,?49,?60]).to_frame("ages")
ages.mask(cond=~ages["ages"].between(50,?60),?other=np.nan)

13. 列軸的min、max
雖然大家都知道min和max的功能,但應用在列上的應該不多見。這對函數(shù)其實還可以這么用:
index?=?["Diamonds",?"Titanic",?"Iris",?"Heart?Disease",?"Loan?Default"]
libraries?=?["XGBoost",?"CatBoost",?"LightGBM",?"Sklearn?GB"]
df?=?pd.DataFrame(
????{lib:?np.random.uniform(90,?100,?5)?for?lib?in?libraries},?index=index
)
>>>?df

>>>?df.max(axis=1) Diamonds?????????99.52684 Titanic??????????99.63650 Iris?????????????99.10989 Heart?Disease????99.31627 Loan?Default?????97.96728 dtype:?float64
14. nlargest、nsmallest
有時我們不僅想要列的最小值/最大值,還想看變量的前 N 個或 ~(top N) 個值。這時nlargest和nsmallest就派上用場了。
diamonds.nlargest(5,?"price")

15. idmax、idxmin
我們用列軸使用max或min時,pandas 會返回最大/最小的值。但我現(xiàn)在不需要具體的值了,我需要這個最大值的位置。因為很多時候要鎖定位置之后對整個行進行操作,比如單提出來或者刪除等,所以這種需求還是很常見的。
使用idxmax和idxmin即可解決。
>>>?diamonds.price.idxmax() 27749 >>>?diamonds.carat.idxmin() 14
16. value_counts
在數(shù)據(jù)探索的時候,value_counts是使用很頻繁的函數(shù),它默認是不統(tǒng)計空值的,但空值往往也是我們很關(guān)心的。如果想統(tǒng)計空值,可以將參數(shù)dropna設(shè)置為False。
ames_housing?=?pd.read_csv("data/train.csv")
>>>?ames_housing["FireplaceQu"].value_counts(dropna=False,?normalize=True)
NaN????0.47260
Gd?????0.26027
TA?????0.21438
Fa?????0.02260
Ex?????0.01644
Po?????0.01370
Name:?FireplaceQu,?dtype:?float64
17. clip
異常值檢測是數(shù)據(jù)分析中常見的操作。使用clip函數(shù)可以很容易地找到變量范圍之外的異常值,并替換它們。
>>>?age.clip(50,?60)

18. at_time、between_time
在有時間粒度比較細的時候,這兩個函數(shù)超級有用。因為它們可以進行更細化的操作,比如篩選某個時點,或者某個范圍時間等,可以細化到小時分鐘。
>>>?data.at_time("15:00")

from?datetime?import?datetime
>>>?data.between_time("09:45",?"12:00")

19. hasnans
pandas提供了一種快速方法hasnans來檢查給定series是否包含空值。
series?=?pd.Series([2,?4,?6,?"sadf",?np.nan]) >>>?series.hasnans True
該方法只適用于series的結(jié)構(gòu)。
20. GroupBy.nth
此功能僅適用于GroupBy對象。具體來說,分組后,nth返回每組的第n行:
>>>?diamonds.groupby("cut").nth(5)

到此這篇關(guān)于分享20個Pandas短小精悍的數(shù)據(jù)操作的文章就介紹到這了,更多相關(guān)Pandas數(shù)據(jù)操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
5個Python使用F-String進行格式化的實用技巧分享
F-String(格式化字符串字面值)是在Python?3.6中引入的,它是一種非常強大且靈活的字符串格式化方法,本文總結(jié)了5個實用的F-String技巧,相信一定能讓你的代碼輸出更加的美觀,快跟隨小編一起學習起來吧2024-03-03
python 求1-100之間的奇數(shù)或者偶數(shù)之和的實例
今天小編就為大家分享一篇python 求1-100之間的奇數(shù)或者偶數(shù)之和的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python數(shù)據(jù)類型之Dict字典實例詳解
這篇文章主要介紹了Python數(shù)據(jù)類型之Dict字典,結(jié)合具體實例形式詳細分析了Python字典的概念、原理、定義、元素添加、刪除、遍歷等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
python 已知一個字符,在一個list中找出近似值或相似值實現(xiàn)模糊匹配
今天小編就為大家分享一篇python 已知一個字符,在一個list中找出近似值或相似值實現(xiàn)模糊匹配,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
python新式類和經(jīng)典類的區(qū)別實例分析
這篇文章主要介紹了python新式類和經(jīng)典類的區(qū)別,結(jié)合實例形式分析了python新式類和經(jīng)典類的功能、區(qū)別與使用方法,需要的朋友可以參考下2020-03-03
Python開發(fā)游戲之井字游戲的實戰(zhàn)步驟
最近正在學習Python,所以最近做了一個關(guān)于Python的實例,下面這篇文章主要給大家介紹了關(guān)于Python開發(fā)游戲之井字游戲的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-02-02

