Pandas trong Python

Pandas trong Python

Phan Nhật Chánh

Chánh30 tháng 10, 2020

6 min read
·
views
·
likes

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
pip install pandas

Import library

import pandas as pd import numpy as np # import numpy nếu cần
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)
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ụ 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)
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)
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)
dct = {'name':'Asabeneh','country':'Finland','city':'Helsinki'} s = pd.Series(dct) print(s)

Constant

s = pd.Series(10, index = [1, 2,3]) print(s)
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)
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)
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)
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)
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)
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
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
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
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
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
# 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
# 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í
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)
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]
# 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
!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)
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()
# Đọ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:
    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ó.