Tìm hiểu Pandas trong 15 phút
- Giới thiệu về pandas
- Các kiểu dữ liệu trong pandas
- Cài đặt pandas
- Một số thao tác cơ bản trên dữ liệu với pandas
- Tham khảo
Giới thiệu về pandas
Pandas là một thư viện python mã nguồn mở khá phổ biến để xử lý và phân tích dữ liệu, được phát triển vào năm 2008 bởi Wes McKinney. Cụ thể hơn nó cung cấp những cấu trúc dữ liệu linh hoạt để thao tác với các dữ liệu dạng bảng và chuỗi thời gian (time series). Đây là cũng một trong những thư viện quan trọng trong data science
hiện nay.
Thư viện pandas rất phù hợp để xử lý các dữ liệu dạng bảng (tabular data). Không những nó hỗ trợ đọc dữ liệu từ nhiều nguồn khác nhau như text, csv, excel, json, sql, hdf5, v.v. Mà nó còn giúp chúng ta kết hợp, thao tác và phân tích dữ liệu từ nhiều nguồn này lại. Có thể nói là nó giúp làm hàng tá thứ mà chúng ta muốn trên các nguồn dữ liệu thô một cách thật dễ dàng.
Các kiểu dữ liệu trong pandas
Trong pandas có hai kiểu dữ liệu chính là Series và đặc biệt là DataFrame. Pandas cũng cung cấp rất nhiều chức năng tiện lợi và hiệu suất cao cho DataFrame, chúng ta có thể tìm hiểu thêm về các chức năng này bên dưới.
Cấu trúc dữ liệu | Kích thước | Mô tả |
---|---|---|
Series | 1 chiều | Là dạng dữ liệu 1 chiều như array (size immutable) |
DataFrame | 2 chiều | Là dạng dự liệu 2 chiều như bảng trong database (size mutable) |
Panel | 3 chiều | Là dạng dữ liệu 3 chiều, bao gồm nhiều DataFrame (size mutable) |
Cài đặt pandas
Chúng ta có thể dễ cài đặt pandas trong vòng một nốt nhạc với pip
pip install pandas
Một số thao tác cơ bản trên dữ liệu với pandas
1. Đọc dữ liệu từ file csv
Để đọc một file csv từ bên ngoài, ta chỉ cần dùng hàm read_csv
, nó sẽ trả về cho ta một DataFrame
. Mặc dịnh thì nó sẽ sử dụng dấu phẩy (comma) làm delimeter, tuy nhiên chúng ta cũng có thẻ tuỳ biến tham số delimeter, file encoding cũng như tự thêm tên các cột cho file csv không có headers. Các bạn có thể tham khảo thêm chữ ký đầy đủ của hàm này ở đây
Ví dụ ta có file actors.cvs
như sau
Name,Sex,Age,Height,Weight
Alex,M, 41,74,170
Bert,M, 42,68,166
Carl,M, 32,70,155
Dave,M, 39,72,167
Elly,F, 30,66,124
Fran,F, 33,66,115
Gwen,F, 26,64,121
Hank,M, 30,71,158
Ivan,M, 53,72,175
Jake,M, 32,69,143
Kate,F, 47,69,139
Luke,M, 34,72,163
Myra,F, 23,62, 98
Neil,M, 36,75,160
Omar,M, 38,70,145
Page,F, 31,67,135
Quin,M, 29,71,176
Ruth,F, 28,65,131
Đoạn code sau sẽ load file biostats.csv
và hiện thị 5 dòng đầu tiên. Kết quả được thực thi và hiện thị trên Jypiter.
import pandas as pd
biostats_df = pd.read_csv("biostats.csv")
biostats_df.head(5)
2. Lấy một số cột dữ liệu
Để lấy dữ liệu của một số cột nhất định, ta chỉ cần truyền danh sách các cột ta muốn lấy vào như sau:
biostats_df[["Name", "Age"]]
Đoạn này tương đương với câu select sau trong SQL
SELECT Name, Age FROM biostats
3. Lấy dữ liệu theo điều kiện
Về cơ bản thì chúng ta có thể viết conditional expression vào bên trong phần ngoặc vuông biostats_df[expresion goes here]
M
Tìm tất cả người có giới tính là biostats_df[biostats_df.Sex == 'M']
Đoạn này tương đương với câu select sau trong SQL
SELECT * FROM biostats WHERE Sex = 'M'
Tìm tất cả người có tuổi bé hơn 30 và lớn hơn 25
biostats_df[(biostats_df.Age < 30) & (biostats_df.Age > 25)]
Chúng ta cũng có thể query như SQL
biostats_df.query("Age > 25 & Age < 30")
Tìm tên những người có chứa cụm từ cụ thể
Ví dụ tìm tất cả người mà tên có chứa cụm “an”
biostats_df[biostats_df.Name.str.contains('an')]
4. Thêm/Xoá cột dữ liệu
Thêm một cột trên DataFrame
Về cơ bản thì DataFrame khá giống Array, vị dụ để thêm một cột năm sinh ta làm như sau
df_len = len(biostats_df)
birth_year = [(2019 - biostats_df.iloc[i].Age) for i in range(df_len)]
biostats_df['Birth Year'] = birth_year
biostats_df.tail(5)
Xoá một/ nhiều cột trên DataFrame
Lưu ý nó chỉ trả về một bản copy của DataFrame đã bị xoá các cột dự liệu. DataFrame gốc vẫn không thay đổi
biostats_df.drop('Name', axis=1) # Xóa 1 cột
biostats_df.drop(['Height', 'Weight'], axis=1) # Xoá nhiều cột
biostats_df.drop(columns=['Birth Year', 'Age']) # Xoá nhiều cột
5. Các thống kê cơ bản
Mô tả cơ bản về DataFrame
Hàm describe()
trên DataFrame trả về các thống kê cơ bản của DataFrame đó
biostats_df.describe()
Tính giá trị trung bình theo nhóm
Ví dụ ta tính giá trị trung bình của tất cả các dòng nhóm theo giới tính
biostats_df.groupby('Sex').mean()
Vẽ biểu đồ phân bố giá trị của một cột
Bar chart
import matplotlib.pyplot as plt
biostats_df['Height'].value_counts().plot(kind='bar')
Pie chart
import matplotlib.pyplot as plt
biostats_df['Age'].value_counts().plot(kind='pie')
6. Thao tác trên DataFrame
Join 2 DataFrame
Giả sử chúng ta có 2 DataFrames, và chúng ta muốn join chúng lại (như join hai bảng trong database)
colors_df = pd.DataFrame({'Id': ['C0', 'C1', 'C2', 'C3', 'C4', 'C5'],
'Name': ['Red', 'Green', 'Blue', 'Yellow', 'Black', 'Purple']})
items_df = pd.DataFrame({'Id': ['D0', 'D1', 'D2', 'D3', 'D4', 'D5'],
'Name': ['Ballon', 'Tree', 'Car', 'Sand', 'Phone', 'T-Shirt'],
'Color': ['C0', 'C1', 'C2', 'C3', 'C4', 'C5']
})
items_df.set_index("Color").join(colors_df.set_index('Id'), lsuffix='_item', rsuffix='_color')
Sắp xếp lại DataFrame
biostats_df.sort_values('Age', ascending=True)
Ghi DataFrame thành file csv
colors_df.to_csv('colors.csv')
Tham khảo
Subscribe to Koodibar
Get the latest posts delivered right to your inbox