如果想學習 Python 數據分析,其中必掌握的一個數據處理技巧就是排序。可以極大的加速處理數據的效率。pandas 使用的數據排序的方法有 .sort_values() 和 .sort_index() 。
整套學習自學教程中應用的數據都是《三國志》、《真·三國無雙》系列遊戲中的内容。
Pandas 排序方法入門
DataFrame 是一種帶有标記的行和列的數據結構,能按行或列值以及行或列索引對數據進行排序。 DataFrame 中行和列索引是用數字表示,可以使用索引位置從特定行或列中檢索數據。
默認情況下索引号從零開始,也可以手動分配自己的索引。
數據準備
import pandas as pd
df = pd.read_Excel("Romance of the Three Kingdoms 13/人物詳情數據.xlsx")
df.head()
.sort_values()
類似 Excel 中的值排序,在 DataFrame 中使用 .sort_values() 沿任一軸(列或行)對值進行排序。
.sort_index()
使用 .sort_index() 通過行索引或列标簽對 DataFrame 進行排序。
DataFrame 單列數據排序
.sort_values() 默認情況返回一個按升序排序的新 DataFrame ,并且不會修改原始 DataFrame。
按升序按列排序使用 .sort_values() 排序要将單個參數傳遞給包含要排序的列的名稱的方法。
df.sort_values("生年")
排序順序調整
默認情況下 .sort_values() ascending 設置為 True(升序排列)。如果按降序排序則設置為 False 。
df.sort_values("生年",ascending=False)
選擇排序算法
可用的算法有 快速排序(quicksort) 、歸并排序(mergesort) 、堆排序(heapsort)。
df.sort_values(by="city08",ascending=False,kind="mergesort")
DataFrame 多列數據排序
按兩個鍵排序,可以将列名列表by傳遞。
升序按列排序要在多列上對 DataFrame 進行排序,必須提供列名列表。
df.sort_values(by=["生年", "壽命"])[["生年", "壽命"]]
生年 壽命
779 130 66
471 132 63
592 132 63
183 132 64
435 132 75
... ... ...
369 243 18
279 246 18
318 246 57
727 247 60
227 248 36
857 rows × 2 columns
調整排序 by 列表的的順序。
df.sort_values(by=["壽命","生年"])[["壽命","生年"]]
壽命 生年
335 13 196
605 14 195
794 16 177
679 17 182
369 18 243
... ... ...
822 107 162
843 107 162
844 107 162
845 107 162
851 107 162
857 rows × 2 columns
df.sort_values(by=["壽命","生年"],ascending=False)[["壽命","生年"]]
壽命 生年
811 107 162
822 107 162
843 107 162
844 107 162
845 107 162
... ... ...
369 18 243
679 17 182
794 16 177
605 14 195
335 13 196
857 rows × 2 columns
使用多個列進行排序并讓這些列使用不同的 ascending 參數。pandas 可以通過單個方法調用來完成此操作。如果要按升序對某些列進行排序,而按降序對某些列進行排序,則可以将布爾值列表傳遞給 ascending 即可。
df.sort_values(
by=["壽命","生年","登場"],
ascending=[True, True, False]
)[["壽命","生年","登場"]]
壽命 生年 登場
335 13 196 207
605 14 195 207
794 16 177 190
679 17 182 196
369 18 243 253
... ... ... ...
811 107 162 176
822 107 162 176
843 107 162 176
844 107 162 176
845 107 162 176
857 rows × 3 columns
DataFrame 有一個.index 屬性,默認表示行位置的數字。索引可以視為行号,有助于快速查找和識别行(功能同 MySQL)。
索引升序排序使用 .sort_index() 根據行索引對 DataFrame 進行排序。
使用 .sort_values() 創建一個新的排序 DataFrame 進行後續的操作。
sorted_df = df.sort_values(by=["make", "model"])
sorted_df
使用 .sort_index() 恢複 DataFrame 原始順序。
sorted_df.sort_index()
使用 bool 進行判斷。
sorted_df.sort_index() == df
可以自定義索引分配了 .set_index() 設置列表進行參數傳遞。
assigned_index_df = df.set_index(["壽命","生年"])
assigned_index_df
使用 .sort_index() 進行排序。
assigned_index_df.sort_index()
索引降序排序
assigned_index_df.sort_index(ascending=False)
DataFrame 列排序
使用 DataFrame 的列标簽對行值進行排序。 使用 .sort_index() 并将可選參數軸設置為 1 将按列标簽對 DataFrame 進行排序。
DataFrame 的軸是指索引(axis=0)或列(axis=1)。 可以使用這兩個軸來索引和選擇 DataFrame 中的數據以及對數據進行排序。
列标簽排序
df.sort_index(axis=1)
df.sort_index(axis=1, ascending=False)
排序時處理丢失的數據
使用 na_position 參數執行此缺失數據列的排序操作。
df["mpgData_"] = df["mpgData"].map({"Y": True})
na_position 的 .sort_values()
.sort_values() 接受一個名為 na_position 的參數,該參數有助于處理要排序的列中的缺失數據。
df.sort_values(by="mpgData_",na_position="first")
用于排序的列中的任何缺失數據都将顯示在 DataFrame 的前面。用于查看列的缺失值情況。
DataFrame 排序修改在 .sort_values() 中增加重要的參數 inplace=True。作用在于直接對原始的 DataFrame 進行修改。
df.sort_values("壽命",inplace=True)
df.reset_index(drop=True,inplace=True)
df
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!