20 個短小精悍的pandas 騷操作

blank

20 個短小精悍的pandas 騷操作

大家好,我是東哥啊。

本次為大家準備了一個系列內容,請看

1. ExcelWriter

很多時候而Excel就不一樣了,

df1=pd.DataFrame([["AAA","BBB"]],columns=["Spam","Egg"])df2=pd.DataFrame([["ABC","XYZ"]],columns=["Foo","Bar"])withExcelWriter("path_to_file.xlsx")aswriter:df1.to_excel(writer,sheet_name="Sheet1")df2.to_excel(writer,sheet_name="Sheet2")

如果有時間變量,輸出時還可以另外,它還可以通過

withExcelWriter("path_to_file.xlsx",mode="a",engine="openpyxl")aswriter:df.to_excel(writer,sheet_name="Sheet3")

2. pipe

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

# Mind the [0] at the enddiamonds["cut_enc"]=pd.factorize(diamonds["cut"])[0]>>>diamonds["cut_enc"].sample(5)52103239813031843010675066340Name:cut_enc,dtype:int64

區別是,

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

data=pd.Series([1,6,7,[46,56,49],45,[15,10,12]]).to_frame("dirty")data.explode("dirty",ignore_index=True)

blank

這部分可以參考我之前寫的騷操作系列:

5. squeeze

很多時候,我們用其實,只要使用比如:

# 没使用squeezesubset=diamonds.loc[diamonds.index<1,["price"]]# 使用squeezesubset.squeeze("columns")

blank

可以看到,壓縮完結果已經是這部分可以參考我之前寫的騷操作系列:

6. between

dataframe

diamonds diamonds [ diamonds [ "price" ]  . between ( 3500 , 3700 , inclusive = "neither" )] . sample ( 5 )

blank

7. T

這是所有的它在顯示

boston.describe().T.head(10)

blank

8. pandas styler

pandas

>>> >>> diabetes . describe () . T . drop ( "count" , axis = 1 )  . style . highlight_max ( color = "darkred" )

blank

當然了,條件格式有非常多種。詳細的可以參考我之前寫的騷操作系列:

9. Pandas options

pandas

dir(pd.options)['compute','display','io','mode','plotting']

一般情況下使用

pd.options.display.max_columns=Nonepd.options.display.precision=5

這部分東哥之前進行過總結,可以參考我之前寫的騷操作系列:

10. convert_dtypes

經常使用這種情況可以用

sample=pd.read_csv("data/station_day.csv",usecols=["StationId","CO","O3","AQI_Bucket"],)>>>sample.dtypesStationIdobjectCOfloat64O3float64AQI_Bucketobjectdtype:object>>>sample.convert_dtypes().dtypesStationIdstringCOfloat64O3float64AQI_Bucketstringdtype:object

可以參考我之前寫的騷操作系列:

11. select_dtypes

在需要篩選變量類型的時候,可以直接用

# 选择数值型的变量diamonds.select_dtypes(include=np.number).head()# 排除数值型的变量diamonds.select_dtypes(exclude=np.number).head()

12. mask

mask比如下面我們想讓age為50-60以外的單元為空,只需要在

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)

blank

13. 列軸的min、max

雖然大家都知道這對函數其實還可以這麼用:

index=["Diamonds","Titanic","Iris","Heart Disease","Loan Default"]libraries=["XGBoost","CatBoost","LightGBM","Sklearn GB"]df=pd.DataFrame({lib:np.random.uniform(90,100,5)forlibinlibraries},index=index)>>>df

blank

>>>df.max(axis=1)Diamonds99.52684Titanic99.63650Iris99.10989HeartDisease99.31627LoanDefault97.96728dtype:float64

14. nlargest、nsmallest

有時我們不僅想要列的最小值/最大值,還想看變量的前N 個或這時

diamonds.nlargest(5,"price")

blank

15. idmax、idxmin

我們用列軸使用但我現在不需要具體的值了,我需要這個最大值的位置。因為很多時候要鎖定位置之後對整個行進行操作,比如單提出來或者刪除等,所以這種需求還是很常見的。

使用

>>>diamonds.price.idxmax()27749>>>diamonds.carat.idxmin()14

16. value_counts

在數據探索的時候,如果想統計空值,可以將參數

ames_housing=pd.read_csv("data/train.csv")>>>ames_housing["FireplaceQu"].value_counts(dropna=False,normalize=True)NaN0.47260Gd0.26027TA0.21438Fa0.02260Ex0.01644Po0.01370Name:FireplaceQu,dtype:float64

17. clip

異常值檢測是數據分析中常見的操作。使用

>>>age.clip(50,60)

blank

18. at_time、between_time

在有時間粒度比較細的時候,這兩個函數超級有用。因為它們可以進行更細化的操作,比如篩選某個時點,或者某個範圍時間等,可以細化到小時分鐘。

>>>data.at_time("15:00")

blank

fromdatetimeimportdatetime>>>data.between_time("09:45","12:00")

blank

19. hasnans

pandas

series=pd.Series([2,4,6,"sadf",np.nan])>>>series.hasnansTrue

該方法只適用於

20. GroupBy.nth

此功能僅適用於具體來說,分組後,

>>>diamonds.groupby("cut").nth(5)
blank

參考: [1]
[2]

原創不易,歡迎點贊、在看和分享。

原創文章持續更新,可以微信搜一搜「

What do you think?

Written by marketer

blank

歐賽斯解讀第一性原理及創新的秘密

看了n遍《傳播學教程》,但我敢說這些考點你還是會忽略(上) | 必讀書目梳理01