JSON
Cấu trúc đơn giản của file json có dạng như sau:
{
"name": "John Doe",
"age": 30,
"married": true,
"children": ["Anna", "Tom"],
"address": {
"street": "123 Main St",
"city": "New York",
"zip": "10001"
}
}
Cấu trúc JSON dạng mảng
[
{
"id": 1,
"product": "Laptop",
"price": 1500.0
},
{
"id": 2,
"product": "Smartphone",
"price": 800.0
}
]
Đọc file JSON
Pandas
hỗ trợ đọc file JSON
theo phương thức sau
pd.read_json(path_or_buf=None, orient=None,...)
Trong đó:
-
path_or_buf
: là đường dẫn đến file json hoặc Object cho trước -
orient
: Kiểu cấu trúc của jsonrecords
: Dữ liệu có dạng danh sách các dictionary theo cấu trúc[{column -> value}, ... , {column -> value}]
split
: Dữ liệu có dạng dictionary theo cấu trúc{index -> [index], columns - [columns], data -> [values]}
index
: Dữ liệu dạng dictionary theo cấu trúc{"index" -> {"column" -> "value"}}
columns
: Dữ liệu dạng dictionary theo cấu trúc{column -> {index -> value}}
values
: danh sách các giá trị
-
Ngoài ra còn các tham số khác nữa như
chunksize
,nrow
, các bạn có thể tham khảo tại pd.read_json()
Cấu trúc Records
Giả sử ta có sample_pokemon.json
Lưu mảng JSON như sau. Có thể hiểu là mỗi phần tử của mảng là một dòng trong pandas với key là tên cột và value là giá trị của cột.
[{"name":"Bulbasaur","type":["Grass","Poison"],"height":"0.71 m","weight":"6.9 kg"},
{"name":"Ivysaur","type":["Grass","Poison"],"height":"0.99 m","weight":"13.0 kg"},
{"name":"Venusaur","type":["Grass","Poison"],"height":"2.01 m","weight":"100.0 kg"},
{"name":"Charmander","type":["Fire"],"height":"0.61 m","weight":"8.5 kg"},
{"name":"Charmeleon","type":["Fire"],"height":"1.09 m","weight":"19.0 kg"}]
Ta có thể gọi phương thức pd.read_json()
với orient='records'
df = pd.read_json('sample_pokemon.json', orient='records')
df.head()
name type height weight
0 Bulbasaur [Grass, Poison] 0.71 m 6.9 kg
1 Ivysaur [Grass, Poison] 0.99 m 13.0 kg
2 Venusaur [Grass, Poison] 2.01 m 100.0 kg
3 Charmander [Fire] 0.61 m 8.5 kg
4 Charmeleon [Fire] 1.09 m 19.0 kg
Cấu trúc Split
Cấu trúc split có dạng là 1 Json với các key key là index, columns, data. Trong đó
- index là mảng các index của các dòng,
- columns là mảng các cột
- data là mảng các giá trị.
{"index": [0,1,2,3,4],
"columns": ["name","type","height","weight"],
"data": [["Bulbasaur",["Grass","Poison"],"0.71 m","6.9 kg"],
["Ivysaur",["Grass","Poison"],"0.99 m","13.0 kg"],
["Venusaur",["Grass","Poison"],"2.01 m","100.0 kg"],
["Charmander",["Fire"],"0.61 m","8.5 kg"],
["Charmeleon",["Fire"],"1.09 m","19.0 kg"]]}
Ta có thể gọi phương thức pd.read_json()
với orient='split'
df = pd.read_json('sample_pokemon.json', orient='split')
df.head()
name type height weight
0 Bulbasaur [Grass, Poison] 0.71 m 6.9 kg
1 Ivysaur [Grass, Poison] 0.99 m 13.0 kg
2 Venusaur [Grass, Poison] 2.01 m 100.0 kg
3 Charmander [Fire] 0.61 m 8.5 kg
4 Charmeleon [Fire] 1.09 m 19.0 kg
Cấu trúc Index
Đối với cấu trúc Index, ta có dạng JSON như sau. Cấu trúc này gần tương tự với cấu trúc Records nhưng các key là index của dòng.
{"0":{"name":"Bulbasaur","type":["Grass","Poison"],"height":"0.71 m","weight":"6.9 kg"},
"1":{"name":"Ivysaur","type":["Grass","Poison"],"height":"0.99 m","weight":"13.0 kg"},
"2":{"name":"Venusaur","type":["Grass","Poison"],"height":"2.01 m","weight":"100.0 kg"},
"3":{"name":"Charmander","type":["Fire"],"height":"0.61 m","weight":"8.5 kg"},
"4":{"name":"Charmeleon","type":["Fire"],"height":"1.09 m","weight":"19.0 kg"}}
Ta có thể gọi phương thức pd.read_json()
với orient='index'
df = pd.read_json('sample_pokemon.json', orient='index')
df.head()
Cấu trúc Columns
Cấu trúc Columns có dạng JSON như sau. Cấu trúc này có key là cột, Value là một dictionary với các key là index của dòng, value là giá trị của dòng.
{"name":{"0":"Bulbasaur",
"1":"Ivysaur",
"2":"Venusaur",
"3":"Charmander"
"4":"Charmeleon"},
"type":{"0":["Grass","Poison"],
"1":["Grass","Poison"],
"2":["Grass","Poison"],
"3":["Fire"],
"4":["Fire"]},
"height":{"0":"0.71 m",
"1":"0.99 m",
"2":"2.01 m",
"3":"0.61 m",
"4":"1.09 m"},
"weight":{"0":"6.9 kg",
"1":"13.0 kg",
"2":"100.0 kg",
"3":"8.5 kg",
"4":"19.0 kg"}}
Ta có thể gọi phương thức pd.read_json()
với orient='columns'
df = pd.read_json('sample_pokemon.json', orient='columns')
df.head()
Cấu trúc Values
[["Bulbasaur",["Grass","Poison"],"0.71 m","6.9 kg"],
["Ivysaur",["Grass","Poison"],"0.99 m","13.0 kg"],
["Venusaur",["Grass","Poison"],"2.01 m","100.0 kg"],
["Charmander",["Fire"],"0.61 m","8.5 kg"],
["Charmeleon",["Fire"],"1.09 m","19.0 kg"]]
-
pd.read_json()
mặc địnhorient='records'
. Các cấu trúcrecords
vàindex
là các cấu trúc JSON thường gặp. -
values
không phải cấu trúc JSON. -
có thể truyền link file thay vì file được lưu ở máy.