[2020铁人赛Day29]糊里糊涂Python就上手-Pandas的观念与运用(下)

今日目标

学习了解 Python Pandas 资料存取与运用视觉化呈现数据

DataFrame 资料操作

在提到 Python Pandas 资料存取与运用视觉化呈现数据前,先补充说明一下昨天提到的 DataFrame 如何操作资料内容

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))

https://ithelp.ithome.com.tw/upload/images/20201014/20091333isaApXwL00.png

DataFrame 资料更新

若是 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) # 印出所有数值

https://ithelp.ithome.com.tw/upload/images/20201014/20091333wfDJDB8gFH.png

DataFrame 资料删除

若是 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) # 印出所有数值

https://ithelp.ithome.com.tw/upload/images/20201014/20091333xq52QSkC7M.png

大范围删除数值

# 依照给予的索引位置删除,轴向编号 axis=0
变数名称 = df.drop(df.index[起始位置:终止位置][, axis=轴向编号])

# 依照给予的栏位位置删除,轴向编号 axis=1
变数名称 = df.drop(df.columns[起始位置:终止位置][, axis=轴向编号])

Pandas 资料存取

Pandas 可以从 CSV、Excel、SQL、JSON、HTML中取得资料,汇入後再转换为 DataFrame 进行资料的修改、排序等等动作

Pandas 读取资料

汇入方法 说明
read_csv 汇入 CSV 资料
read_excel 汇入 Excel 资料
read_sql 汇入 SQL 资料库资料
read_json 汇入 JSON 格式资料
read_html 汇入 HTML 网页表格资料

Pandas 储存资料

储存方法 说明
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 档案内容:
https://ithelp.ithome.com.tw/upload/images/20201014/20091333x32mUARTGh.png


使用 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))

执行後画面:
https://ithelp.ithome.com.tw/upload/images/20201014/20091333UtLNyls3nY.png

Pandas 视觉化呈现数据

plot 绘制

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) # 圆饼图

执行後画面:
https://ithelp.ithome.com.tw/upload/images/20201014/20091333uiMV3fIMpQ.png
https://ithelp.ithome.com.tw/upload/images/20201014/20091333ha4JrAadpo.png

结论

纪录到此,Python Pandas 资料存取与运用视觉化呈现数据的部分就简单的带过了,希望各位能藉由上述的范例体会上手,并灵活应用於实务上


<<:  Day29影片教学:Azure小白想早下班--之--使用Azure Synapse Analytics汇入数PB资料

>>:  堆积排序法(Heap Sort)笔记

混合模式-30天学会HTML+CSS,制作精美网站

「混合模式」是什麽呢?有用过photoshop的设计师对图片混合模式肯定不陌生,是元素重叠部分的颜色...

D1 安装Django以及尝试玩玩看

Hi All, 这里是我记录Django学习历程的纪录,我是以一个略懂python基础的人为出发点,...

[Day13] 补充说明 – csrf

今天要来补充一下Day9 – views有说明到的csrf,虽然这些东西某某百科都有,那我会特别补充...

Day24 jQuery 基本教学(四)

CSS 与特效 JQ 的特效主要是协助快速控制 CSS,包含控制了你的 display 做显示或隐藏...

【Day 19】if __name__ == '__main__' :

前言 大家在查找程序码时可能会看到 if __name__=='__main__': 这段 code...