利用Python做到EXCEL和SQL的部分功能!

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

導入數據、數據概覽

導入所需要的庫

進群:960410445 即可獲取書十套PDF!

import
 pandas 
as
 pd
import
 numpy 
as
 np
import
 requests
from
 bs4 
import
 
BeautifulSoup
import
 re
%matplotlib inline
  • Panads庫 處理我們的數據
  • numpy庫 執行數值的操作和轉換
  • requests庫 來從網站獲取HTML數據
  • Python(re) 的正則表達式來更改在處理數據時可能出現的某些字符串
  • %matplotlib inline 在Jupyter notebook做圖時使用的, 如果不適用這句 魔法命令 圖形就會另外打開一個窗口, 使用這句命令 就會讓作圖出現在 jupyter notebook的瀏覽器中

爬取數據

r = requests.get(
'https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)_per_capita'
)
gdptable = r.text
soup = 
BeautifulSoup
(gdptable, 
'lxml'
)
table = soup.find(
'table'
, attrs = {
"class"
 :
"wikitable sortable"
})
theads=[]
for
 tx 
in
 table.findAll(
'th'
):
 theads.append(tx.text)
data =[]
for
 rows 
in
 table.findAll(
'tr'
):
 row={}
 i=
0
 
for
 cell 
in
 rows.findAll(
'td'
):
 row[theads[i]]=re.sub(
'\\xa0'
, 
''
,cell.text)
 i+=
1
 
if
 len(row)!=
0
:
 data.append(row)
print
(data)

輸出的結果

利用Python實現EXCEL和SQL的部分功能!

key-value列表

國家排名、國家的名稱、人均GDP(以美元表示)

字典轉換為dataframe

gdp = pd.
DataFrame
(data)

查看前5行

gdp.head()

利用Python實現EXCEL和SQL的部分功能!

替換列名

重命名列

#只修改其中一列
gdp = gdp.rename(columns = {
'US$\n'
:
'money'
})
#修改多個列名
gdp.columns = [
'Country'
,
'Rank'
,
'money'
]
gdp.head()

利用Python實現EXCEL和SQL的部分功能!

刪除列

del
 gdp[
'Rank'
]

轉換數據類型

#刪除逗號和換行符
gdp[
'money'
] = gdp[
'money'
].apply(
lambda
 x: re.sub(
','
,
''
,x)) 
gdp[
'money'
] = gdp[
'money'
].apply(
lambda
 x: re.sub(
'\n'
,
''
,x)) 
#將money轉換為數值型
gdp[
'money'
] = gdp[
'money'
].apply(pd.to_numeric)
gdp.head(
3
)

利用Python實現EXCEL和SQL的部分功能!

計算均值

#計算均值
gdp[
'money'
].mean()

選擇數據

#1、人均GDP大於5w
gdp5w = gdp[gdp[
'money'
] > 
50000
] 
#2、提取以‘S’開頭的國家
gdps = gdp[gdp[
'Country'
].str.startswith(
'S'
)]
len(gdps)#得到一共有
25
個國家
#3、選擇以S開頭的國家且人均GDP大於5w的國家
gdps5w = gdp[(gdp[
'money'
] > 
50000
) & (gdp[
'Country'
].str.startswith(
'S'
))]
#4、現在選擇人均GDP大於5w或者以S開頭的國家
gdps_or_gdp5w = gdp[(gdp.money > 
50000
) | (gdp.
Country
.str.startswith(
'S'
))]

求和

#計算人均GDP超過5萬的總和
gdp5w.money.sum()

直方圖

#直方圖
gdp5w.money.hist()

利用Python實現EXCEL和SQL的部分功能!

連接數據

countrycsv = pd.read_csv(
"D:\\data\\PythonData\\Country.csv"
)
df = pd.merge(gdp,countrycsv,how = 
'inner'
,left_on = 
'Country'
,right_on = 
'TableName'
)
countrycsv.head()

利用Python實現EXCEL和SQL的部分功能!

groupby分組

#將國家和人均GDP按其所在地區進行分組
gdpregion = df.groupby([
'Region'
]).mean()
gdpregion

利用Python實現EXCEL和SQL的部分功能!

因為groupby操作創建的是一個可被操作的臨時對象,不會創建永久接口來構建聚合結果,因此我們使用pivot_table透視表進行分組

pivot_table透視表

gdppivot = df.pivot_table(index = [
'Region'
], margins = 
True
, aggfunc = np.mean)
gdppivot

刪除不需要的列

gdppivot.drop({
'LatestIndustrialData'
,
'LatestTradeData'
,
'LatestWaterWithdrawalData'
},axis = 
1
, inplace = 
True
)
gdppivot

利用Python實現EXCEL和SQL的部分功能!

拓展部分:pandas.merge

原文鏈接:

https://mp.weixin.qq.com/s?__biz=MzIzMzQ3MDQ1Mw==&mid=2247484131&idx=1&sn=638f242383d8b7a75d5556f4777eaf44&chksm=e8846279dff3eb6f4b7ec772252f7c2a1dfe8ea3c2a50320d2a5d1183384186e208819f212f9&mpshare=1&scene=23&srcid=0112Uz99mMmUG2tksj1Zo6bc#rd

參數列表

merge函數的參數

利用Python實現EXCEL和SQL的部分功能!

連接方法

pd.merge()方法

創建兩個DataFrame

inner(內連接):連接兩邊都有的值

outer(外連接):左連接和右連接的並集,左側DataFrame取全部數據,右側DataFrame匹配左側DataFrame並用NaN填充缺失值。

默認下是inner連接,即inner 代表交集;outer 代表並集;left 和 right 分別為取一邊。

#創建DataFrame
df1 = pd.
DataFrame
({
'key'
:list(
'bbaca'
),
'data1'
:range(
5
)})
df1
df2 = pd.
DataFrame
({
'key'
:[
'a'
,
'b'
,
'd'
],
'data2'
:range(
3
)})
df2

利用Python實現EXCEL和SQL的部分功能!

#內連接
pd.merge(df1,df2)
#缺省時參數how是內連接,並按照相同的字段key進行合併,推薦使用下面這種方式
#pd.merge(df1,df2,on = 'key')

利用Python實現EXCEL和SQL的部分功能!

#外連接
pd.merge(df1,df2,how = 
'outer'
)

利用Python實現EXCEL和SQL的部分功能!

#左連接
pd.merge(df1,df2,how = 
'left'
)

利用Python實現EXCEL和SQL的部分功能!

#右連接
pd.merge(df1,df2,how = 
'right'
)

利用Python實現EXCEL和SQL的部分功能!

pd.merge()索引連接

#索引
#df1使用data1當做連接關鍵字,df2使用索引當做連接關鍵字
pd.merge(df1,df2,left_on = 
'data1'
,right_index = 
True
)

利用Python實現EXCEL和SQL的部分功能!

上面可以發現兩個DataFrame中都有key列,merge合併之後,pandas會字段在後面加上(_x,_y)。我們可以使用suffixes進行設置。

pd.merge(df1,df2,left_on = 
'data1'
,right_index = 
True
,
suffixes = (
'_df1'
,
'_df2'
))

suffixes=(‘_x’,’_y’) 指的是當左右對象中存在除連接鍵外的同名列時,結果的區分方式,可以各加一個小尾巴。

利用Python實現EXCEL和SQL的部分功能!

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!