Cùng với Matplotlib và
Numpy, Pandas là một trong những thư viện được dùng rộng rãi cùng Python. Có thể khẳng định, đó là bộ 3 chúng ta buộc phải biết, thậm chí dùng thành thạo, khi viết các chương trình Python. Pandas cung cấp nhiều đối tượng và phương thức cho các cấu trúc dữ liệu.
Pandas là thư viện không thể thiếu cho chúng ta trong suốt quá trình xử lý dữ
liệu (data munging): từ chuyển đổi hay ánh xạ dữ liệu thô sang dạng dữ liệu mà
chúng ta mong muốn, nhằm có thể phân tích dễ dàng hơn.
Chúng ta sẽ tập trung
vào hai cấu trúc dữ liệu hiệu quả được dùng trong Python: Series và DataFrame; cả
hai cấu trúc này được xây trên thư viện Numpy.
Series
Là một đối tượng tương
tự như mảng một chiều, hay như một cột của một bảng. Mặc định, mỗi phần tử
trong item sẽ được gán chỉ số (index)
từ 0 tới N-1, trong đó N là số phần tử của series.
import pandas as pd
# Tạo ra một series với
một list bất kì
s = pd.Series(['Nguyen Van Hau', 3.14, -11012017, 'Happy New Year!']) print (type(s)) print (s) |
<class
'pandas.core.series.Series'>
0 Nguyen Van Hau
1 3.14
2 -11012017
3 Happy New Year!
dtype:
object
Chúng ta cũng có thể tạo ra các chỉ
số cho các phần tử:
s = pd.Series(['Nguyen Van Hau', 3.14, -11012017, 'Happy New Year!'], index=['B', 'O', 'N', 'G']) |
B Nguyen Van Hau
O 3.14
N -11012017
G Happy New Year!
bienXe = [29, 89, 34, 15, 52, 99, 98, 43, 18, 17] cities = pd.Series(bienXe) |
print (cities1) |
0 29
1 89
2 34
3 15
4 52
5 99
6 98
7 43
8 18
9 17
Chúng ta có thể chỉ định index trong series bằng cách tạo hai list, một cho index và một cho các phần tử:
bienXe = [29, 89, 34, 15, 52, 99, 98, 43, 18, 17] thanhPho = ['Hanoi', 'Hung Yen', 'Hai Duong', 'Hai Phong', 'TPHCM', 'Bac Ninh', 'Bac Giang', 'Da Nang', 'Nam Dinh', 'Thai Binh'] cities = pd.Series(bienXe, thanhPho) print (cities) |
Hanoi 29
Hung
Yen 89
Hai
Duong 34
Hai
Phong 15
TPHCM 52
Bac
Ninh 99
Bac
Giang 98
Da
Nang 43
Nam
Dinh 18
Thai
Binh 17
Chúng ta cũng có thể tạo series từ một dictionary, khi đó key sẽ
đóng vai trò là index trong series:
import pandas as pd d = {'Hanoi': 29, 'Hung Yen': 89, 'Hai Duong': 34, 'Hai Phong': 15, 'TPHCM': 52, 'Bac Ninh': 99, 'Bac Giang': 98, 'Da Nang': 43, 'Nam Dinh':18, 'Thai Binh': 17} cities = pd.Series(d) print (cities) |
Bac
Giang 98
Bac
Ninh 99
Da
Nang 43
Hai
Duong 34
Hai
Phong 15
Hanoi 29
Hung
Yen 89
Nam
Dinh 18
TPHCM 52
Thai
Binh 17
Hiển
thị thông tin trong Series:
print (cities.head()) |
Bac
Giang 98
Bac
Ninh 99
Da
Nang 43
Hai
Duong 34
Hai
Phong 15
In ra chỉ số series
print (cities.index) |
Index([u'Bac
Giang', u'Bac Ninh', u'Da Nang', u'Hai Duong', u'Hai Phong',
u'Hanoi', u'Hung Yen', u'Nam Dinh',
u'TPHCM', u'Thai Binh'],
dtype='object')
Hiển thị thông tin mô tả về dữ liệu
(count – số hàng, max
– giá trị lớn nhất, min – giá
trị nhỏ nhất, mean – trung bình,
v.v...):
print cities.describe() |
count 10.000000
mean 49.400000
std 33.846713
min 15.000000
25% 20.750000
50% 38.500000
75% 79.750000
max 99.000000
Hiển thị thông tin tính tổng:
total = 0 for item in cities: total+=item print(total) |
494
Hoặc chúng ta có thể dùng hàm:
print cities.sum() |
494
Tính chiều dài của một dữ liệu
trong series:
print len(cities) |
10
Truy
vấn trong Series:
Chúng ta có thể truy xuất tới phần
tử thông qua các chỉ số:
print (cities['Hung Yen']) |
89.0
print (cities[['Hung Yen', 'Hai Duong']]) |
Hung
Yen 89
Hai
Duong 34
Hoặc có thể dùng hàm series.iloc[số-thứ-tự-hàng]
print (cities.iloc[5]) |
29
Chúng ta cũng có thể dùng truy vấn
trực tiếp tới số thứ tự hàng. Nhưng cẩn thận khi các index cũng là các số tự nhiên. Không nên dùng!
print (cities[5]) |
29
Chúng ta cũng có thể dùng phép toán
bool làm index:
print (cities[cities > 50]) |
Bac
Giang 98
Bac
Ninh 99
Hung
Yen 89
TPHCM 52
Thay đổi dữ liệu trong Series
Chúng ta có thể thao tác cho toàn bộ
dữ liệu dễ dàng:
cities_1 = cities-10 print (cities_1) |
Bac
Giang 88
Bac
Ninh 89
Da
Nang 33
Hai
Duong 24
Hai
Phong 5
Hanoi 19
Hung
Yen 79
Nam
Dinh 8
TPHCM 42
Thai
Binh 7
Chúng ta cũng có thể thay đổi giá
trị phần tử trong series:
print (cities['TPHCM']) cities['TPHCM'] = 53print (cities['TPHCM']) |
52.0
53.0
DataFrame
Là một cấu trúc dữ liệu dạng bảng,
gồm hàng (index – chỉ số) và cột (name - tên). Chúng ta có thể coi
DataFrame là một nhóm các đối tượng Series cùng với các index.
Khởi
tạo một DataFrame
Chúng ta có thể đọc từ một tệp định
dạng csv:
import pandas as pd import os duongDan = os.getcwd() + '\data\iris.data.csv' tenCot = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class'] duLieu = pd.read_csv(duongDan, names=tenCot) print (type(duLieu)) |
<class
'pandas.core.frame.DataFrame'>
Dùng dictionary của các list cho
tham số truyền vào, và key của dictionary chính là các index cho DataFrame:
import pandas as pd data = |
{'year': [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016], 'team': ['Barca','Inter','Barca','Chelsea','Bayern','Real','Barca','Real'], 'players':['Messi','Messi','Messi','Messi','Ronaldo','Ronaldo','Neymar','Ronaldo'], 'goals': [9, 8, 12, 14, 12, 17, 10, 16]} football = pd.DataFrame(data) |
print (football) |
Chúng ta được DataFrame như sau:
year
team players goals
0 2009
Barca Messi 9
1 2010
Inter Messi 8
2 2011 Barca
Messi 12
3 2012
Chelsea Messi 14
4 2013
Bayern Ronaldo 12
5 2014
Real Ronaldo 17
6 2015
Barca Neymar 10
7 2016
Real Ronaldo 16
DataFrame cũng có thể xây dựng từ
các Series:
import pandas as pd item1 = pd.Series({'Name': 'Hau', 'Book1': 'Machine Learning', 'Book2': 'Data Mining', 'Cost': 22.50}) item2 = pd.Series({'Name': 'M.Quy', 'Book1': 'Parallel Computing', 'Book2': 'Software Engineering', 'Cost': 24.10}) item3 = pd.Series({ 'Name': 'Dong', 'Book1': 'Rough Set', 'Book2': 'Big Data', 'Cost': 32.40}) item4 = pd.Series({'Name': 'Nang', 'Book1': 'NLP', 'Book2': 'Data Mining', 'Cost': 28.00}) item5 = pd.Series({'Name': 'Diep', 'Book1': 'Machine Learning', 'Book2': 'Parallel Computing', 'Cost': 34.00}) item6 = pd.Series({'Name': 'Trang', 'Book1': 'Software Testing', 'Book2': 'Machine Learning', 'Cost': 42.00}) item7 = pd.Series({'Name': 'Hue', 'Book1': 'Python Programming', 'Book2': 'Big Data', 'Cost': 42.00}) df = pd.DataFrame([item1, item2, item3, item4, item5, item6, item7], index=['Amazon', 'Dinh Le', 'Amazon', 'Dinh Le', 'Ebay', 'Alibaba', 'Amazon'])print (df) |
Book1 Book2 Cost
Name
Amazon Machine Learning Data Mining 22.5
Hau
Dinh
Le Parallel Computing Software Engineering 24.1
M.Quy
Amazon Rough Set Big Data 32.4
Dong
Dinh
Le NLP Data Mining 28.0
Nang
Ebay Machine Learning Parallel Computing 34.0
Diep
Alibaba Software Testing Machine Learning 42.0
Trang
Amazon Python Programming Big Data 42.0
Hue
Hiển thị thông tin
trong DataFrame:
Chúng ta cũng có thể dùng các lệnh
hiển thị dữ liệu, như đã làm với Series:
print (df.head(3)) |
Hiển thị ra 3 hàng đầu:
Book1 Book2 Cost
Name
Amazon Machine Learning Data Mining 22.5
Hau
Dinh
Le Parallel Computing Software Engineering 24.1 M.Quy
Amazon Rough Set Big Data 32.4
Dong
print (df.tail(2)) |
Hiển thị ra 2 dòng cuối:
Book1 Book2 Cost
Name
Alibaba Software Testing Machine Learning 42.0
Trang
Amazon Python Programming Big Data 42.0
Hue
Truy
vấn dữ liệu trong DataFrame:
Có 2 kiểu truy vấn dữ liệu thường dùng:
·
DataFrame[‘tên-cột’]: trả ra là một Series
·
DataFrame.loc[‘tên-hàng’] (tên hàng – chỉ số index): trả
ra một DataFrame
·
DataFrame.iloc(số-hàng): trả ra là một Series
·
DataFrame.iloc[số-hàng] [‘tên-cột’]: trả ra một phần tử của dữ liệu
print df['Name']
Amazon Hau
Dinh
Le M.Quy
Amazon Dong
Dinh
Le Nang
Ebay Diep
Alibaba Trang
Amazon Hue
Chúng ta xem những ai đã mua sách ở
‘Amazon’:
print (df.loc['Amazon']) |
Book1 Book2
Cost Name
Amazon Machine Learning Data Mining
22.5 Hau
Amazon Rough Set Big Data
32.4 Dong
Amazon Python Programming Big Data
42.0 Hue
Chúng ta xem những ai đã mua sách ở
‘Amazon’ và tên người mua:
print (df.loc['Amazon']['Name']) |
Amazon Hau
Amazon Dong
Amazon Hue
Chúng ta muốn hiển thị tất cả các
hàng dữ liệu nhưng chỉ với cột ‘Name’ :
print (df.loc[:,['Name']]) |
Name
Amazon Hau
Dinh
Le M.Quy
Amazon Dong
Dinh
Le Nang
Ebay Diep
Alibaba Trang
Amazon Hue
Chúng ta muốn xem hàng dữ liệu thứ
3:
print (df.iloc[3]) |
Book1 NLP
Book2 Data Mining
Cost 28
Name Nang
Chúng ta muốn xem hàng dữ liệu thứ
3, mua cuốn Book2 là gì:
print (df.iloc[3]['Book1']) |
Data Mining
Thao
tác dữ liệu trong DataFrame:
Rất
nhiều lúc chúng ta cần sao lưu một DataFrame. Trong trường hợp này chúng ta muốn
xóa đi một index:
copy_df = df.copy()
|
copy_df = copy_df.drop('Amazon') |
print (copy_df) |
Book1 Book2 Cost
Name
Dinh
Le Parallel Computing Software Engineering 24.1
M.Quy
Dinh
Le NLP Data Mining 28.0
Nang
Ebay Machine Learning Parallel Computing 34.0
Diep
Alibaba Software Testing Machine Learning 42.0
Trang
Chúng ta có thể xóa một cột:
del copy_df['Book2'] print (copy_df) |
Book1 Cost
Name
Dinh
Le Parallel Computing 24.1
M.Quy
Dinh
Le NLP 28.0
Nang
Ebay Machine Learning 34.0
Diep
Alibaba Software Testing 42.0
Trang
Thiết lập giá trị cho cả một cột dữ
liệu :
copy_df['Cost'] = 12.0 print (copy_df) |
Book1 Cost
Name
Dinh
Le Parallel Computing 12.0 M.Quy
Dinh
Le NLP 12.0
Nang
Ebay Machine Learning 12.0
Diep
Alibaba Software Testing 12.0
Trang
Chèn một cột dữ liệu mới vào :
df.insert(3,'Currency',21000) print (df) |
Câu lệnh trên chèn cột mới vào vị
trí cột thứ 3, có tên là ‘Currency’, tất cả có giá trị 21000:
Book1 Book2 Cost
Currency Name
Amazon Machine Learning Data Mining 22.5
21000 Hau
Dinh
Le Parallel Computing Software Engineering 24.1
21000 M.Quy
Amazon Rough Set Big Data 32.4
21000 Dong
Dinh
Le NLP Data Mining 28.0
21000 Nang
Ebay Machine Learning Parallel Computing 34.0
21000 Diep
Alibaba Software Testing Machine Learning 42.0
21000 Trang
Amazon Python Programming Big Data 42.0
21000 Hue
Còn rất nhiều các thao tác hữu ích
của pandas trên cơ sở dữ liệu như: Querying, Joining (left', 'right', 'outer',
'inner'), Combining, Grouping. Nhờ những kĩ thuật này mà những thao tác trên
DataFrame tương đương với các câu lệnh cơ bản của SQL trên cơ sở dữ liệu quan hệ.
Bạn đọc có thể tham khảo [1-5].
Tài liệu tham khảo:
1 nhận xét:
MGM National Harbor Casino - Mapyro
The casino is located in the Marina District 평택 출장샵 on the west 경상남도 출장안마 side of the casino. The casino has 37 계룡 출장마사지 tables in all of the venues, including the MGM Address: 3100 S Las Vegas Blvd, Las 수원 출장마사지 Vegas, NV 89109Phone: 702-770-6305 의정부 출장샵
Đăng nhận xét