Pandas trong Python

Pandas là một công cụ dùng để thao tác và phân tích dữ liệu với hiệu suất cao, dễ sử dụng cho ngôn ngữ lập trình Python. Đặc biệt, nó cung cấp các cấu trúc dữ liệu và công cụ được thiết kế để làm việc với dữ liệu dạng bảng.

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

  • Ví dụ 1:
nums = [1, 2, 3, 4, 5]
s = pd.Series(nums, index=[1, 2, 3, 4, 5])
print(s)
  • Ví dụ 2:
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 và 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 là hợp lí

# Kiểm tra cột Birth Year,
df['Birth Year'].dtype # Kêt quả trả về là 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 nó là 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 là hợp lí
  • 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

Đọ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 có 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 có 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 và 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 và Weight
print(len(heights) == len(weights))

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

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

# Lấy thông tin thống kê dữ liệu ở cột Height và 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:
  - Lọc các tiêu đề có chứa Python.
  - Lọc các tiêu đề có chứa JavaScript.
  - Khám phá dữ liệu và hiểu về nó.

© 2019-2021 Phan Nhật Chánh