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的,不要...