學習了解 Python Pandas 資料存取與運用視覺化呈現數據
在提到 Python Pandas 資料存取與運用視覺化呈現數據前,先補充說明一下昨天提到的 DataFrame 如何操作資料內容
資料排序 | 說明 |
---|---|
df.sort_values(by = "欄位"[, ascending = 布林值]) | 根據資料數值排序,by 作為排序值的欄位,ascending的話,True 表示遞增(未設定此參數的話,此為預設值)),False 表示遞減 |
df.sort_index(axis=軸向編號[, ascending = 布林值]) | 根據軸向排序,axis 軸向編號,0 表示依照索引名稱排序,1 表示依照欄位名稱排序 |
完整代碼
import pandas as pd
dictValue = {
"Chinese": {"A1":68, "A2":86, "A3":57},
"Engilsh": {"A1":63, "A2":92, "A3":83},
"Math": {"A1":65, "A2":89, "A3":77}
}
df = pd.DataFrame(dictValue)
print(df) # 印出所有數值
print("-" * 40)
print("使用欄位「Math」做遞減排序:\n", df.sort_values(by="Math", ascending=False))
print("-" * 40)
print("使用索引名稱做遞減排序:\n", df.sort_index(axis=0, ascending=False))
若是 DataFrame 想要更新資料,可以使用 loc() 方法,其語法為:
df.loc["索引名稱"]["欄位名稱"] = 將更改的數值
情境一:將 A2 的 Engilsh 更改為 76
情境二:將 A3 的所有欄位更改為 100
完整代碼
import pandas as pd
dictValue = {
"Chinese": {"A1":68, "A2":86, "A3":57},
"Engilsh": {"A1":63, "A2":92, "A3":83},
"Math": {"A1":65, "A2":89, "A3":77}
}
df = pd.DataFrame(dictValue)
print(df) # 印出所有數值
print("-" * 40)
# 情境一
df.loc["A2"]["Engilsh"] = 76 # 將 A2 的 Engilsh 更改為 76
# 情境二
df.loc["A3", :] = 100 # 將 A3 的所有欄位更改為 100
print(df) # 印出所有數值
若是 DataFrame 想要刪除資料,可以使用 drop() 方法,其語法為:
(axis 軸向編號,0 代表為列(索引名稱),1 代表為欄(欄位名稱))
變數名稱 = df.drop(索引名稱或欄位名稱[, axis=軸向編號])
情境一:刪除索引 A3 所有數值
情境二:刪除欄位 Engilsh 所有數值
完整代碼
import pandas as pd
dictValue = {
"Chinese": {"A1":68, "A2":86, "A3":57},
"Engilsh": {"A1":63, "A2":92, "A3":83},
"Math": {"A1":65, "A2":89, "A3":77}
}
df = pd.DataFrame(dictValue)
print(df) # 印出所有數值
print("-" * 40)
# 情境一
df2 = df.drop("A3", axis=0) # 刪除索引 A3 所有數值
print(df2) # 印出所有數值
print("-" * 40)
# 情境二
df3 = df.drop("Engilsh", axis=1) # 刪除欄位 Engilsh 所有數值
print(df3) # 印出所有數值
大範圍刪除數值
# 依照給予的索引位置刪除,軸向編號 axis=0
變數名稱 = df.drop(df.index[起始位置:終止位置][, axis=軸向編號])
# 依照給予的欄位位置刪除,軸向編號 axis=1
變數名稱 = df.drop(df.columns[起始位置:終止位置][, axis=軸向編號])
Pandas 可以從 CSV、Excel、SQL、JSON、HTML中取得資料,匯入後再轉換為 DataFrame 進行資料的修改、排序等等動作
匯入方法 | 說明 |
---|---|
read_csv | 匯入 CSV 資料 |
read_excel | 匯入 Excel 資料 |
read_sql | 匯入 SQL 資料庫資料 |
read_json | 匯入 JSON 格式資料 |
read_html | 匯入 HTML 網頁表格資料 |
儲存方法 | 說明 |
---|---|
to_csv | 儲存為 CSV 檔案資料 |
to_excel | 儲存為 Excel 檔案資料 |
to_sql | 儲存為 SQL 資料庫資料 |
to_json | 儲存為 JSON 格式資料 |
to_html | 儲存為 HTML 網頁表格資料 |
讓我們先用先前範例的 Dictionary data,運用 Pandas to_csv 儲存 DataFrame 資料
to_csv 語法:
pandas.to_csv(檔案名稱[, header=布林值, index=布林值, encoding=編碼, sep=分隔符號])
其中,header 為是否要保留欄位(預設為 True),index 為是否要保留索引(預設為 True)
完整代碼
import pandas as pd
dictValue = {
"Chinese": {"A1":68, "A2":86, "A3":57},
"Engilsh": {"A1":63, "A2":92, "A3":83},
"Math": {"A1":65, "A2":89, "A3":77}
}
df = pd.DataFrame(dictValue)
df.to_csv('pandas_example.csv', encoding='utf-8-sig')
執行後開啟 CSV 檔案內容:
使用 Pandas read_csv 讀出剛產出的 pandas_example.csv 檔案內容,並印出資料格式
read_csv 語法:
pandas.read_csv(檔案名稱[, header=欄位列, index=索引列, encoding=編碼, sep=分隔符號])
完整代碼
import pandas as pd
data = pd.read_csv("pandas_example.csv", header=0, index_col=0)
print(data)
print(type(data))
執行後畫面:
Pandas 模組是以 DataFrame資料的 plot() 方法將數據繪製出來,其語法為:
(可以不用設定其餘參數即可呈現,kind 預設為 line 折線圖)
DataFrame.plot([kind='圖形mode', title=None, figsize=None, fontsize=None, xticks=None, yticks=None, xlim=None, ylim=None, grid=False, legend=True])
DataFrame plot參數|說明|預設值
-|-
kind|圖形模式|line
title|圖形標題|None
figsize|圖形大小|None
fontsize|圖形 x、y 軸的字體大小|None
xticks|圖形 x 軸的刻度值|None
yticks|圖形 y 軸的刻度值|None
xlim|圖形 x 軸的刻度範圍|None
ylim|圖形 y 軸的刻度範圍|None
grid|是否顯示隔線|False
legend|是否顯示圖示說明|True
kind 參數值 | 說明 |
---|---|
line|折線圖 | |
bar|長條圖 | |
barh|橫條圖 | |
pie|圓餅圖 | |
hist|直方圖 |
使用 Pandas read_csv 讀出剛產出的 pandas_example.csv 檔案內容,並印出「折線圖」、「長條圖」、「橫條圖」、「圓餅圖」
(這邊的「圓餅圖」需要使用到 subplot=True 這個參數,這會讓多張圖表放置在同一個區域中)
完整代碼
import pandas as pd
df = pd.read_csv("pandas_example.csv", header=0, index_col=0)
df.plot(kind='line', figsize=(5,5), title='Pandas plot line') # 折線圖
df.plot(kind='bar', figsize=(5,5), title='Pandas plot bar') # 長條圖
df.plot(kind='barh', figsize=(5,5), title='Pandas plot barh') # 橫條圖
df.plot(kind='pie', figsize=(16,16), title='Pandas plot pie', subplots=True) # 圓餅圖
執行後畫面:
紀錄到此,Python Pandas 資料存取與運用視覺化呈現數據的部分就簡單的帶過了,希望各位能藉由上述的範例體會上手,並靈活應用於實務上