updated July 05, 2024280 views

Pandas là một thư viện mã nguồn mở trong Python, cung cấp các công cụ và cấu trúc dữ liệu linh hoạt để xử lý và phân tích dữ liệu. Pandas cho phép người dùng đọc và viết các tệp dữ liệu từ nhiều định dạng khác nhau, bao gồm các tệp CSV, Excel, SQL và các tệp dữ liệu khác. Nó cũng cung cấp các hàm để thực hiện các tác vụ như lọc dữ liệu, phân tích thống kê, phân tích dữ liệu và xử lý dữ liệu bị thiếu. Pandas còn là một trong những thư viện quan trọng nhất trong việc phân tích dữ liệu trong lĩnh vực khoa học dữ liệu và phân tích dữ liệu.

pip install pandas

Import library

import pandas as pd
import numpy as np # import numpy nếu cần

Pandas Series

Default Index

nums = [1, 2, 3, 4,5]
s = pd.Series(nums)
print(s)

Custom Index

nums = [1, 2, 3, 4, 5]
s = pd.Series(nums, index=[1, 2, 3, 4, 5])
print(s)
fruits = ['Orange','Banana','Mangao']
fruits = pd.Series(fruits, index=[1, 2, 3])
print(fruits)

MultiIndex

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo'], ['one', 'two', 'one', 'two', 'one', 'two']]
index = pd.MultiIndex.from_arrays(arrays)
df = pd.DataFrame(np.random.randn(3, 6), index=['A', 'B', 'C'], columns=index)
print (df)

Dictionary

dct = {'name':'Asabeneh','country':'Finland','city':'Helsinki'}
s = pd.Series(dct)
print(s)

Constant

s = pd.Series(10, index = [1, 2,3])
print(s)

Linspace

s = pd.Series(np.linspace(5, 20, 10)) # linspace(starting, end, items)
print(s)

Tạo một DataFrames

List

data = [
    ['Asabeneh', 'Finland', 'Helsink'],
    ['David', 'UK', 'London'],
    ['John', 'Sweden', 'Stockholm']
]
df = pd.DataFrame(data, columns=['Names','Country','City'])
print(df)

Dictionary

data = {'Name': ['Asabeneh', 'David', 'John'], 'Country':[
    'Finland', 'UK', 'Sweden'], 'City': ['Helsiki', 'London', 'Stockholm']}
df = pd.DataFrame(data)
print(df)

List of Dictionaries

data = [
    {'Name': 'Asabeneh', 'Country': 'Finland', 'City': 'Helsinki'},
    {'Name': 'David', 'Country': 'UK', 'City': 'London'},
    {'Name': 'John', 'Country': 'Sweden', 'City': 'Stockholm'}]
df = pd.DataFrame(data)
print(df)

Thao tác với DataFrame

Chúng ta sẽ tạo một DataFrame mới và thêm một cột mới vào DataFrame vừa tạo, bạn cũng có thể xóa một cột hiện có, sửa đổi một cột hiện có, thay đổi kiểu dữ liệu của các giá trị cột trong DataFrame.

  • Tạo DataFrame mới
import pandas as pd
import numpy as np
data = [
    {"Name": "Asabeneh", "Country":"Finland","City":"Helsinki"},
    {"Name": "David", "Country":"UK","City":"London"},
    {"Name": "John", "Country":"Sweden","City":"Stockholm"}]
df = pd.DataFrame(data)
print(df)
  • Thêm một cột mới với tên Weight vào DataFrame vừa tạo
weights = [74, 78, 69]
df['Weight'] = weights
df
  • Thêm một cột mới với tên Height vào DataFrame vừa tạo
heights = [173, 175, 169]
df['Height'] = heights
df
  • Như bạn có thể thấy trong DataFrame trên, tôi đã thêm 2 cột mới là WeightHeight. Và bây giờ hãy thêm một cột với tên BMI (chỉ số khối cơ thể). BIM được tính bằng cách lấy Weight chia cho bình phương Height. Ta được công thức:

BMI=WeightHeight2BMI = \dfrac{Weight} {Height ^ 2}

  • Bạn có thể thấy, Height ở bảng dữ liệu trên được tính bằng cm. Vì vậy, ta nên đổi nó thành m
df['Height'] = df['Height'] * 0.01
df
  • Viết một function để tính chỉ số BMI
def calculate_bmi ():
    weights = df['Weight']
    heights = df['Height']
    bmi = []
    for w,h in zip(weights, heights):
        b = w/(h*h)
        bmi.append(b)
    return bmi

bmi = calculate_bmi()

df['BMI'] = bmi
df
  • Lấy một chử số ở phần thập phân ở cột BMI
# Lấy một chử số  phần thập phân bằng round()
df['BMI'] = round(df['BMI'], 1)
df
  • Thông tin trong DataFrame có vẻ chưa đủ, hãy thêm 2 cột Birth YearCurrent Year vào DataFrame
# Thêm 2 cột Birth Year  Current Year vào DataFrame
birth_year = ['1769', '1985', '1990']
current_year = pd.Series(2021, index=[0, 1, 2])
df['Birth Year'] = birth_year
df['Current Year'] = current_year
df
  • Kiểm tra kiểu dữ liệu ở các cột
print(df.Weight.dtype) # Kiểu dữ liệu  cột Weight  hợp 

# Kiểm tra cột Birth Year,
df['Birth Year'].dtype # Kêt quả trả về  kiểu String, nên thay đổi thành kiểu số

# Đổi từ String sang Int
df['Birth Year'] = df['Birth Year'].astype('int')
print(df['Birth Year'].dtype) # Kiểm tra dữ liệu  cột Birth Year một lần nữa
# Ta thấy   kiểu số nguyên

# Kiểm tra cột Current Year,
df['Current Year'] = df['Current Year'].astype('int')
df['Current Year'].dtype # Kiểu dữ liệu  cột Current Year  hợp 
  • Sau khi kiểm tra cột Birth YearCurrent Year là kiểu sô nguyên, ta có thể tính được tuổi và thêm vào cột Ages
ages = df['Current Year'] - df['Birth Year']
df['Ages'] = ages
print(df)
  • Kết quả trả về cho thấy, người ở hàng thứ nhất sống đến nay được 251 năm (đó là lỗi đánh máy hoặc dữ liệu điền đại vào). Vì vậy, hãy kiểm tra và hiển thị độ tuổi một cách thực tế.
# Nếu Ages > 120 thì hiển thị dữ liệu
df[df['Ages'] > 120]

# Nếu Ages < 120 thì hiển thị dữ liệu
df[df['Ages'] < 120]

Pandas CSV

Để biết thêm về file csv bạn có thể tham khảo xử lý các tệp tin trong python.

Đọc nột file CSV

Download file csv tại đây

!curl -O https://phannhatchanh.com/files/weight-height.csv
  • Đọc file weight-height.csv
import pandas as pd

df = pd.read_csv('weight-height.csv')
print(df)

Khám phá dữ liệu

# Đọc 5 dòng đầu tiên bằng cách sử dụng head()
df.head() # Ta  thể tăng số hàng bằng cách truyền đối số vào phương thức head()

# Đọc 5 dong cuối cùng bằng cách sử dụng tail()
df.tail() # Ta  thể tăng số hàng bằng cách truyền đối số vào phương thức tail()

# Đếm số hàng  số cột
df.shape

# Lấy tên của tiêu đề cột
df.columns

# Lấy dữ liệu  cột Height
heights = df['Height']
print(heights)

# Lấy dữ liệu  cột Weight
weights = df['Weight']
print(weights)

# So sánh độ dài của 2 cột Height  Weight
print(len(heights) == len(weights))

# Lấy thông tin thống  dữ liệu  cột Height
heights.describe()

# Lấy thông tin thống  dữ liệu  cột Weight
weights.describe()

# Lấy thông tin thống  dữ liệu  cột Height  Weight
df.describe()

Bài tập

  • Đọc file hacker_news.csv từ thư mục data.
  • Lấy 5 hàng đầu tiên và 6 hàng cuối cùng.
  • Lấy tiêu đề cột dưới dạng Pandas Series.
  • Đếm số hàng và số cột:
    1. Lọc các tiêu đề có chứa Python.
    2. Lọc các tiêu đề có chứa JavaScript.
    3. Khám phá dữ liệu và hiểu về nó.