Python 經驗總結 1 資料框的切片

2021-09-24 13:24:57 字數 3869 閱讀 3100

pandas 風格切片

每個人都知道 python 是一種高效、簡潔、優雅的語言。然而 python 也有很多坑,現在老宅開乙個新系列,分享老宅在學習和實踐中總結的經驗和教訓,不定期分享。

第乙個經驗就是要吐槽 總結資料框的切片。python 有很多第三方的模組(比如 pandas 這樣的資料科學神器),對提公升 python 的實用性貢獻很大。然而模組多就有乙個***:語法的不一致性。老宅在學習 pandas 的過程中就被資料框切片的複雜語法搞得撓頭。

本文參考了,特此致謝。

資料框的切片,是在列表的切片的基礎上發展起來的。不過列表是一維,資料框是二維,因此資料框切片有自己獨特的方法。所以資料框的切片有兩個風格:原生風格和 pandas 風格(這兩個風格是老宅自己總結的…)。在總結以前,我們先構建資料集:

>>

>

import pandas as pd

>>

>

from sklearn.datasets import load_iris # 載入 iris 資料集模組

>>

> iris = pd.dataframe(load_iris()[

"data"])

# 載入 iris 資料集並轉化為列表

>>

> iris.columns =

["sepal_length"

,"sepal_width",.

.."petal_length"

,"petal_width"

]# 定義列名

>>

>

from string import ascii_lowercase # 載入字母表

>>

> idx =

>>

>

for i in ascii_lowercase:..

.for j in ascii_lowercase:..

# 建立字母表排列組合

>>

> iris.index = idx[

:150

]# 定義行名

>>

> iris.head(

)

sepal_length

sepal_width

petal_length

petal_width

aa5.1

3.51.4

0.2ab

4.93.0

1.40.2

ac4.7

3.21.3

0.2ad

4.63.1

1.50.2

ae5.0

3.61.4

0.2直接在資料框後面使用.連線列名。例如:

>>

> iris.sepal_length[1:

5]ab 4.9

ac 4.7

ad 4.6

ae 5.0

name: sepal_length, dtype: float64

這個方法不需要用""括上列,非常方便。不過這樣有個潛在的侷限:如果列名裡有空格,這個方法就不好用了,就要用下面的方法。

這個方法的好處是引號內可以有特殊符號,比如空格。這樣切片稍微麻煩一點,但是還可以接受。

這個方法與上面一樣都用來切片單列。有什麼不同呢?請看下面的例子:

>>

> iris[

"sepal_length"][

1:5]

ab 4.9

ac 4.7

ad 4.6

ae 5.0

name: sepal_length, dtype: float64

>>

> iris[

["sepal_length"]]

[1:5

]

sepal_length

ab4.9

ac4.7

ad4.6

ae5.0

單中括號和雙中括號的區別在於單中括號返回的是序列,而雙中括號返回的是資料框。

>>

> lst =

["sepal_length"

,"petal_length"

]>>

> iris[lst]

.head(

)

sepal_length

petal_length

aa5.1

1.4ab

4.91.4

ac4.7

1.3ad

4.61.5

ae5.0

1.4

>>

> iris[1:

5]

sepal length

sepal width

petal length

petal width

ab4.9

3.01.4

0.2ac

4.73.2

1.30.2

ad4.6

3.11.5

0.2ae

5.03.6

1.40.2

>>

> iris[

"ae"

:"ag"

]

sepal_length

sepal_width

petal_length

petal_width

ae5.0

3.61.4

0.2af

5.43.9

1.70.4

ag4.6

3.41.4

0.3行切片還有乙個列切片不具備的功能:切片連續的行。如果資料框的行名和列名不一致,pandas 會自動判斷你在切片行還是列。如果一致嘛…pandas 就不知所措了。這時候就要用到下面的 pandas 風格切片。

注意行和列都是用的複數形式,意味著可以同時切片多行或多列。同時也可以切片範圍內的行或列,使用:即可。

>>

> iris.loc[

"ae"

:"ag",[

"sepal_length"

,"petal_length"

]]

sepal_length

petal_length

ae5.0

1.4af

5.41.7

ag4.6

1.4想切片全部的行或列,只需要單獨使用:即可。

iris.loc[

"ae"

:"ag",:

]# 切片全部列

sepal_length

sepal_width

petal_length

petal_width

ae5.0

3.61.4

0.2af

5.43.9

1.70.4

ag4.6

3.41.4

0.3也可以基於行或列的數字索引切片,具備loc的一切結構和性質。

>>

> iris.iloc[1:

3,0:

2]

sepal_length

sepal_width

ab4.9

3.0ac

4.73.2

好了,總結完畢,困覺覺去了~

經驗總結 資料預處理經驗總結1

1.對於特徵較多的df,進行資料預處理時需要對每個特徵變數進行相關處理,為了避免混亂,可以df.info 後將輸出複製到sublime,然後在sublime中針對每個特徵變數進行處理方式標註 非python 只是為了展示在sublime中的效果 action type 30697 non null ...

主窗體 彈出框,經驗總結

前段時間做的無線無源的測溫專案,彈出框的製作思路 都是利用.show 完成。問題就來了 觸發一次,彈出乙個框,顯然達不到要求,後來通過窗體間傳值,將窗體第一次觸發後,就將觸發條件遮蔽,直到彈出框銷毀,再開啟觸發。其實,彈出框完全可以用.showdialog 完成。但是,這種方式在該彈出框未銷毀的時候...

程式程式設計經驗總結(1)

近頃 総括報告 在近一段時間裡,我主要在進行 様 様 共進電機様開發,在這三個專案的開發過程中,有一些收穫,也產生了一些想法,希望可以和大家交流。我進入小組快 1個月了,從開始的練習模組到現在的正式專案,前後做了快10多個專案模組了,但是依然有bug出現!雖然大家都安慰我說 開始做都有bug的,不要...