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à Weight và Height. 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:
- 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 Year và Current 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 Year và Current 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 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ó.