Bài viết gần đây

| Giới thiệu về Pandas

Được viết bởi thanhdt vào ngày 16/11/2025 lúc 10:22 | 10 lượt xem

Giới thiệu về Pandas

Pandas là gì?

Pandas là một thư viện Python mã nguồn mở, mạnh mẽ và linh hoạt được sử dụng để phân tích và thao tác dữ liệu. Tên “Pandas” được lấy từ thuật ngữ “Panel Data”, một khái niệm trong kinh tế lượng. Thư viện này được phát triển bởi Wes McKinney vào năm 2008 và đã trở thành công cụ không thể thiếu trong khoa học dữ liệu, phân tích dữ liệu và machine learning.

Nếu bạn mới bắt đầu với Python, hãy xem bài viết Phân tích kỹ thuật với Python để hiểu cách Python được sử dụng trong phân tích dữ liệu tài chính.

Tại sao sử dụng Pandas?

Pandas cung cấp các cấu trúc dữ liệu và công cụ phân tích hiệu quả, giúp việc làm việc với dữ liệu có cấu trúc trở nên dễ dàng và trực quan hơn so với việc sử dụng các thư viện cơ bản của Python như list hoặc dictionary. Một số lợi ích chính của Pandas bao gồm:

  • Xử lý dữ liệu dễ dàng: Đọc và ghi dữ liệu từ nhiều định dạng khác nhau (CSV, Excel, JSON, SQL, HTML, v.v.)
  • Làm sạch dữ liệu: Xử lý dữ liệu thiếu, loại bỏ trùng lặp, chuyển đổi kiểu dữ liệu
  • Phân tích dữ liệu: Tính toán thống kê, nhóm dữ liệu, pivot tables
  • Tích hợp tốt: Hoạt động tốt với các thư viện khác như NumPy, Matplotlib, Scikit-learn
  • Hiệu suất cao: Được tối ưu hóa cho hiệu suất với các thao tác vectorized

So sánh Pandas và NumPy

Để hiểu rõ hơn về sự khác biệt giữa Pandas và NumPy, hãy xem bảng so sánh dưới đây:

Tiêu chíPandasNumPy
Kiểu dữ liệuDataFrame, SeriesArray (ndarray)
Mục tiêuPhân tích dữ liệu có cấu trúcTính toán số học và đại số tuyến tính
Cú phápDễ đọc, gần với SQLGọn nhẹ nhưng khó hơn
Dùng choData Analyst, Data Scientist, ML EngineerScientific computing, Machine Learning
Xử lý dữ liệu thiếuCó sẵn (NaN)Không có sẵn
Nhãn dữ liệuCó (index, column names)Không có
Đọc fileHỗ trợ nhiều định dạng (CSV, Excel, JSON)Hạn chế
Tốc độChậm hơn NumPy cho tính toán thuầnNhanh hơn cho tính toán số học

Pandas được xây dựng trên nền tảng NumPy, vì vậy chúng thường được sử dụng cùng nhau. Bạn có thể tìm hiểu thêm về NumPy trong phân tích dữ liệu tài chính để hiểu cách hai thư viện này bổ trợ cho nhau.

Cài đặt Pandas

Để cài đặt Pandas, bạn có thể sử dụng pip hoặc conda:

# Sử dụng pip
pip install pandas

# Sử dụng conda
conda install pandas

Cấu trúc dữ liệu chính trong Pandas

Series

Series là một cấu trúc dữ liệu một chiều, tương tự như một mảng hoặc danh sách có nhãn. Mỗi phần tử trong Series có một nhãn (index) tương ứng.

import pandas as pd

# Tạo Series từ list
data = [10, 20, 30, 40, 50]
series = pd.Series(data)
print(series)

# Tạo Series với index tùy chỉnh
series = pd.Series(data, index=['a', 'b', 'c', 'd', 'e'])
print(series)

DataFrame

DataFrame là cấu trúc dữ liệu hai chiều, tương tự như bảng tính Excel hoặc bảng SQL. Nó bao gồm các hàng và cột, mỗi cột có thể chứa các kiểu dữ liệu khác nhau.

# Tạo DataFrame từ dictionary
data = {
    'Tên': ['An', 'Bình', 'Chi', 'Dũng'],
    'Tuổi': [25, 30, 28, 35],
    'Thành phố': ['Hà Nội', 'TP.HCM', 'Đà Nẵng', 'Hà Nội']
}
df = pd.DataFrame(data)
print(df)

Đọc và ghi dữ liệu

Đọc dữ liệu từ file CSV

# Đọc file CSV
df = pd.read_csv('data.csv')

# Đọc với các tùy chọn
df = pd.read_csv('data.csv', encoding='utf-8', sep=',', header=0)

Đọc dữ liệu từ file Excel

# Đọc file Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

Đọc dữ liệu từ JSON

# Đọc file JSON
df = pd.read_json('data.json')

Ghi dữ liệu ra file

# Ghi ra file CSV
df.to_csv('output.csv', index=False)

# Ghi ra file Excel
df.to_excel('output.xlsx', index=False)

# Ghi ra file JSON
df.to_json('output.json', orient='records')

Xem và khám phá dữ liệu

Xem thông tin cơ bản về DataFrame

# Xem 5 dòng đầu tiên
df.head()

# Xem 5 dòng cuối cùng
df.tail()

# Xem thông tin tổng quan
df.info()

# Xem thống kê mô tả
df.describe()

# Xem hình dạng của DataFrame (số hàng, số cột)
df.shape

# Xem tên các cột
df.columns

# Xem index
df.index

Lựa chọn dữ liệu

Lựa chọn cột

# Lựa chọn một cột
df['Tên']

# Lựa chọn nhiều cột
df[['Tên', 'Tuổi']]

Lựa chọn hàng

# Lựa chọn hàng theo index
df.iloc[0]  # Hàng đầu tiên
df.iloc[0:3]  # 3 hàng đầu tiên

# Lựa chọn hàng theo điều kiện
df[df['Tuổi'] > 25]

# Lựa chọn hàng theo label
df.loc[0]

Lọc dữ liệu

# Lọc với một điều kiện
df[df['Tuổi'] > 30]

# Lọc với nhiều điều kiện
df[(df['Tuổi'] > 25) & (df['Thành phố'] == 'Hà Nội')]

# Sử dụng query
df.query('Tuổi > 25 and Thành_phố == "Hà Nội"')

Xử lý dữ liệu thiếu

# Kiểm tra dữ liệu thiếu
df.isnull()
df.isnull().sum()

# Xóa các hàng có dữ liệu thiếu
df.dropna()

# Điền dữ liệu thiếu
df.fillna(0)  # Điền bằng 0
df.fillna(df.mean())  # Điền bằng giá trị trung bình
df.fillna(method='ffill')  # Điền bằng giá trị trước đó

Thao tác với dữ liệu

Thêm cột mới

# Thêm cột từ phép tính
df['Tuổi_mới'] = df['Tuổi'] + 1

# Thêm cột với giá trị cố định
df['Nhóm'] = 'A'

Xóa cột hoặc hàng

# Xóa cột
df.drop('Tên', axis=1, inplace=True)

# Xóa hàng
df.drop(0, axis=0, inplace=True)

Sắp xếp dữ liệu

# Sắp xếp theo cột
df.sort_values('Tuổi', ascending=False)

# Sắp xếp theo nhiều cột
df.sort_values(['Thành phố', 'Tuổi'])

Nhóm dữ liệu (Grouping)

# Nhóm theo một cột
df.groupby('Thành phố').mean()

# Nhóm theo nhiều cột
df.groupby(['Thành phố', 'Nhóm']).sum()

# Áp dụng nhiều hàm thống kê
df.groupby('Thành phố').agg({
    'Tuổi': ['mean', 'min', 'max'],
    'Điểm': 'sum'
})

Kết hợp dữ liệu

Nối dữ liệu theo chiều dọc (Concatenate)

# Nối hai DataFrame
df_combined = pd.concat([df1, df2], ignore_index=True)

Nối dữ liệu theo chiều ngang (Merge)

# Merge giống như JOIN trong SQL
df_merged = pd.merge(df1, df2, on='ID', how='inner')

# Các loại merge: 'inner', 'left', 'right', 'outer'

Thống kê và tính toán

# Tính tổng
df['Tuổi'].sum()

# Tính trung bình
df['Tuổi'].mean()

# Tính trung vị
df['Tuổi'].median()

# Tính độ lệch chuẩn
df['Tuổi'].std()

# Đếm số lượng
df['Thành phố'].value_counts()

# Tương quan
df.corr()

Áp dụng hàm tùy chỉnh

# Áp dụng hàm cho từng phần tử
df['Tuổi'].apply(lambda x: x * 2)

# Áp dụng hàm cho từng hàng
df.apply(lambda row: row['Tuổi'] + row['Điểm'], axis=1)

# Áp dụng hàm cho từng cột
df.apply(lambda col: col.max(), axis=0)

Xử lý chuỗi thời gian

Pandas cung cấp các công cụ mạnh mẽ để làm việc với dữ liệu thời gian:

# Chuyển đổi cột thành datetime
df['Ngày'] = pd.to_datetime(df['Ngày'])

# Lấy năm, tháng, ngày
df['Năm'] = df['Ngày'].dt.year
df['Tháng'] = df['Ngày'].dt.month

# Resample dữ liệu theo thời gian
df.set_index('Ngày').resample('M').mean()

Ví dụ thực tế

Dưới đây là một ví dụ hoàn chỉnh về cách sử dụng Pandas để phân tích dữ liệu. Bạn cũng có thể tham khảo bài viết Làm Bot Giao Dịch Backtest với Pandas để xem cách áp dụng Pandas trong thực tế cho giao dịch tài chính:

import pandas as pd

# Đọc dữ liệu
df = pd.read_csv('sales_data.csv')

# Xem thông tin cơ bản
print(df.head())
print(df.info())

# Làm sạch dữ liệu
df = df.dropna()  # Xóa dữ liệu thiếu
df = df.drop_duplicates()  # Xóa dữ liệu trùng lặp

# Phân tích
total_sales = df['Doanh_thu'].sum()
avg_sales = df['Doanh_thu'].mean()
sales_by_region = df.groupby('Khu_vực')['Doanh_thu'].sum()

# Lọc dữ liệu
high_sales = df[df['Doanh_thu'] > 1000000]

# Sắp xếp
top_products = df.sort_values('Doanh_thu', ascending=False).head(10)

# Xuất kết quả
df.to_csv('cleaned_data.csv', index=False)

Kết luận

Pandas là một thư viện không thể thiếu cho bất kỳ ai làm việc với dữ liệu trong Python. Với các tính năng mạnh mẽ và dễ sử dụng, Pandas giúp bạn xử lý, phân tích và khám phá dữ liệu một cách hiệu quả. Cho dù bạn đang làm việc với dữ liệu nhỏ hay lớn, Pandas cung cấp các công cụ cần thiết để biến dữ liệu thô thành thông tin có ý nghĩa.

Để tìm hiểu thêm về các thư viện Python khác trong giao dịch định lượng, bạn có thể xem bài viết Các thư viện Python phổ biến trong giao dịch định lượng hoặc Làm thế nào để sử dụng Python xây dựng chiến lược giao dịch định lượng.

Tài liệu tham khảo