Py / Python網頁資料擷取與分析班-筆記 10/4

主要內容

_創建json檔案

_網頁資料擷取與分析 202 美元收盤匯率

_pandas iloc與loc方法


1.創建json檔案

[ ]是串列型態資料

{ }是字典型態資料

範例建立的資料是一個字典型態資料,裡面有個key值為people,value為串列型態資料

而串列內存放的又是字典型態資料

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#104JSON檔案輸出處理
#建立以下資料並將其輸出為json檔案
# {
# 'people' :
# [{  
#     'id': '1',
#     'name': 'Peter',
#     'country': 'Taiwan'
# },
# {  
#     'id': '2',
#     'name': 'Jack',
#     'country': 'USA'
# },
# {  
#     'id': '3',
#     'name': 'Cindy',
#     'country': 'Japan'
# }]
# }

import json
#宣告為字典
data = {}

#字典內宣告key值為people的元素 型態為串列
data["peole"] = []

#print(data)
data["peole"].append({'id': '1', 'name': 'Peter','country': 'Taiwan'})
data["peole"].append({'id': '2', 'name': 'Jack','country': 'USA'})
data["peole"].append({'id': '3', 'name': 'Cindy','country': 'Japan'})
print(data)

f = open("1004-2.json",mode="w",encoding="utf-8")
json.dump(data,f) #寫出json檔案
f.close()

 

也可以直接依照格式宣告資料內容

#字典內宣告key值為people的元素 型態為串列
data["peole"] = [{'id': '1', 'name': 'Peter', 'country': 'Taiwan'}, {'id': '2','name': 'Jack','country': 'USA'},{'id': '3','name': 'Cindy','country': 'Japan'}]

 

2.網頁資料擷取與分析 202 美元收盤匯率

需要留意的是讀取本機檔案的方式 f.read( )

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#網頁資料擷取與分析 202 美元收盤匯率
from bs4 import BeautifulSoup
f=open("read.html","r",encoding="utf-8")
# print(f.read())

sp=BeautifulSoup(f.read(), "html.parser")

sp1=sp.find("table","DataTable2")

sp2=sp1.find_all("tr")

#print(sp2[0].text)

# sp3 = sp2[0].text.strip().split("\n")
# print(sp3)

s=""
for i in range(0,len(sp2)):
    sp3 = sp2[i].text.strip().split("\n")
    #print(sp3)
    date = sp3[0]
    price = sp3[1]
    
    s += "{},{}\n".format(date,price)

print(s)

f = open("1004-3.csv", mode="w", encoding="utf-8")
f.write(s)
f.close()

 

3.pandas iloc與loc方法

iloc跟loc最大的差異是

iloc是用列數與欄位數來定位

loc是用列名與欄位名來定位

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#301學生成績

import pandas as pd
f=open("read301.csv","r")
list1=f.readlines()
columns=list1[0].strip("\n").split(",")[1:6]
datas =[]
indexs =[]
for i in range(1,len(list1)):
    list2=list1[i].split(",")
    indexs.append(list2[0])
    list2[5]=list2[5].strip("\n")
    datas.append(list2[1:6])
# print(columns)
# print(indexs)
# print(datas)
df = pd.DataFrame(datas, columns=columns,  index=indexs)
print(df)

# 輸出後二位學生的所有成績
print('後二位的成績')
#print(df.tail(2))
print(df.iloc[2:4])

#取小黃 國語  社會成績
print("小黃 國語  社會成績")
print(df.iloc[1:2,[0,4]])

#取小黃 小美 國語  社會成績
print("小黃 小美 國語  社會成績")
print(df.iloc[[1,3],[0,4]])

 

參考資料:

Pandas loc vs iloc