+10

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 1)

Pandas DataFrame là một cấu trúc chứa dữ liệu hai chiều và các nhãn tương ứng của nó. DataFrames được sử dụng rộng rãi trong data science, machine learning, scientific computing và nhiều lĩnh vực sử dụng nhiều dữ liệu khác.

DataFrames tương tự như SQL tables hoặc bảng tính mà bạn làm việc trong Excel hoặc Calc. Trong nhiều trường hợp, DataFrame nhanh hơn, dễ sử dụng hơn và mạnh hơn bảng hoặc spreadsheets vì chúng là một phần không thể thiếu của hệ sinh thái PythonNumPy. Trong bài hướng dẫn này, chúng ta sẽ học:

  • Pandas DataFrame là gì và cách khởi tạo
  • Làm thế nào access, modify, add, sort, filter,delete data
  • Cách xử lý missing values
  • Cách làm việc với time-series data
  • Cách nhanh chóng visualize dữ liệu

Bắt đầu nào... Let's go!!!

Giới thiệu Pandas DataFrame

Pandas DataFrames là cấu trúc dữ liệu chứa:

  • Dữ liệu được tổ chức theo không gian 2 chiều bao rows và columns
  • Các Labels tương ứng với rows và columns

Bạn có thể bắt đầu làm việc với DataFrames bằng cách import Pandas:

Python:
>>> import pandas as pd

Hãy tưởng tượng bạn đang sử dụng Pandas để phân tích dữ liệu về các ứng viên cho vị trí phát triển ứng dụng web bằng Python. Giả sử bạn quan tâm đến tên, thành phố, độ tuổi và điểm số của ứng viên trong bài kiểm tra lập trình Python hoặc điểm số py-score:


name city age py-core
1 Nam Tran HCM city 18 82.0
2 Huy Nguyen Ha Noi city 19 79.0
3 Minh Huy Ha Noi city 23 89.0
4 Lam Le DaNang city 17 96.0
5 Dat Nguyen HCM city 22 94.0

Trong bảng này, hàng đầu tiên chứa các nhãn cột (tên, thành phố, tuổi và điểm số). Cột đầu tiên chứa các nhãn hàng (1, 2, v.v.). Tất cả các ô khác được điền với các giá trị dữ liệu.

Bây giờ bạn có mọi thứ bạn cần để tạo Pandas DataFrame.

Có một số cách để tạo Pandas DataFrame. Trong hầu hết các trường hợp, bạn sẽ sử dụng hàm tạo DataFrame và cung cấp dữ liệu, nhãn và thông tin khác. Bạn có thể chuyển dữ liệu dưới dạng danh sách hai chiều, bộ tuple hoặc mảng NumPy. Bạn cũng có thể chuyển nó dưới dạng từ điển hoặc phiên bản Pandas Series hoặc dưới dạng một trong số các kiểu dữ liệu khác không được đề cập trong hướng dẫn này.

Đối với ví dụ này, giả sử bạn đang sử dụng từ điển để chuyển dữ liệu:

>>> data = {
    'name': ['Nam Tran', 'Huy Nguyen', 'Minh Huy', 'Lam Le', 'Dat Nguyen'],
    'city': ['HCM city', 'Ha Noi city', 'Ha Noi city', 'Da Nang city', 'HCM city'],
    'age': [18, 19, 23, 17, 22],
    'py-core': [82.0, 79.0, 89.0, 96.0, 94.0]
}
>>> row_labels = [1, 2, 3, 4, 5]

data là một biến Python tham chiếu đến từ điển chứa dữ liệu ứng viên của bạn. Nó cũng chứa các nhãn của các cột:

  • 'name'
  • 'city'
  • 'age'
  • 'py-core'

Cuối cùng, row_labels đề cập đến một danh sách chứa các nhãn của các hàng, là các số từ 1 đến 5.

Bây giờ bạn đã sẵn sàng tạo Pandas DataFrame:

>>> df = pd.DataFrame(data=data, index=row_labels)
>>> df

   name          city          age  py-score
1  Nam Tran     HCM city       18      82.0
2  Huy Nguyen   Ha Noi city    19      79.0
3  Minh Huy     Ha Noi city    23      89.0
4  Lam Le       Da Nang city   17      96.0
5  Dat Nguyen   HCM city       22      94.0

df là một biến chứa tham chiếu đến Pandas DataFrame của bạn. Pandas DataFrame này trông giống như bảng ứng cử viên ở trên và có các tính năng sau:

  • Row labels từ 1 đến 5
  • Column labels là 'name', 'city', 'age', and 'py-score'
  • Data là các dữ liệu: names, cities, ages, và điểm py-core

Pandas DataFrames đôi khi dữ liệu có thể rất lớn, khiến việc xem xét tất cả các hàng cùng một lúc là không thực tế. Bạn có thể sử dụng .head() để hiển thị một số mục đầu tiên và .tail() để hiển thị một số mục cuối cùng:

>>> df.head(n=2)
   name          city          age  py-score
1  Nam Tran     HCM city       18      82.0
2  Huy Nguyen   Ha Noi city    19      79.0

>>> df.tail(n=2)
4  Lam Le       Da Nang city   17      96.0
5  Dat Nguyen   HCM city       22      94.0

Đó là cách bạn có thể hiển thị phần đầu hoặc phần cuối của Pandas DataFrame. Tham số n chỉ định số hàng sẽ hiển thị.

Lưu ý: Có thể hữu ích khi coi Pandas DataFrame như một từ điển gồm các cột, hoặc Chuỗi Pandas, với nhiều tính năng bổ sung.

Bạn có thể truy cập một cột trong Pandas DataFrame giống như cách bạn lấy giá trị từ từ điển:

>>> cities = df['city']
>>> cities
1    HCM city
2    Ha Noi city
3    Ha Noi city
4    Da Nang city
5    HCM city 
Name: city, dtype: object

Đó là cách bạn có được một cột cụ thể. Bạn đã trích xuất cột tương ứng với nhãn 'city', chứa vị trí của tất cả các dữ liệu của bạn muốn làm việc cùng.

Mỗi cột của Pandas DataFrame là một ví dụ của pandas.Series, một cấu trúc chứa dữ liệu một chiều và labels của chúng. Bạn có thể lấy một mục của đối tượng Dòng (row) giống như cách bạn làm với từ điển, bằng cách sử dụng labels của nó làm khóa.

>>> cities[3]
'Ha Noi city'

Trong trường hợp này, 'Ha Noi city' là giá trị dữ liệu và '3' là label tương ứng. Như bạn sẽ thấy trong phần sau, có nhiều cách khác để lấy một mục cụ thể trong Pandas DataFrame.

Bạn cũng có thể truy cập toàn bộ hàng bằng trình truy cập .loc []:

>>> df.loc[3]
name          Minh Huy
city     'Ha Noi city'
age                 23
py-core           89.0 
Name: 3, dtype: object

Lần này, bạn đã trích xuất hàng tương ứng với label 3, chứa dữ liệu cho ứng cử viên có tên là Minh Huy. Ngoài các giá trị dữ liệu từ hàng này, bạn đã trích xuất nhãn của các cột tương ứng.

Dữ liệu trả về cũng là một ví dụ của pandas.Series.

Khởi tạo một Pandas DataFrame

Như đã đề cập, có một số cách để tạo Pandas DataFrame. Trong phần này, chúng ta sẽ học cách thực hiện việc này bằng cách sử dụng hàm tạo DataFrame cùng với:

  • Python dictionaries
  • Python lists
  • Mãng 2 chiều NumPy
  • Files

Bạn có thể bắt đầu bằng cách import Pandas cùng với NumPy, mà bạn sẽ sử dụng trong ví dụ sau:

>>> import numpy as np
>>> import pandas as pd

Tạo Pandas DataFrame với Dictionaries

Như bạn đã thấy, bạn có thể tạo Pandas DataFrame bằng Python dictionary:

>>> d = {'x': [1, 2, 3], 'y': np.array([2, 4, 8]), 'z': 100}

>>> pd.DataFrame(d)
   x  y    z
0  1  2  100
1  2  4  100
2  3  8  100

Khóa của dictionary là label cột của DataFrame và giá trị từ điển là giá trị dữ liệu trong các cột DataFrame tương ứng. Các giá trị có thể được chứa trong một tuple, list, mảng NumPy một chiều, Pandas Series object, hoặc một trong số các kiểu dữ liệu khác. Bạn cũng có thể cung cấp một giá trị duy nhất sẽ được sao chép dọc theo toàn bộ cột.

Có thể kiểm soát thứ tự của các cột bằng thông số cột và nhãn hàng bằng chỉ mục:

>>> pd.DataFrame(d, index=[100, 200, 300], columns=['z', 'y', 'x'])
       z  y  x
100  100  2  1
200  100  4  2
300  100  8  3

Như bạn có thể thấy, bạn đã chỉ định các nhãn hàng 100, 200 và 300. Bạn cũng đã buộc thứ tự của các cột: z, y, x.

Tạo Pandas DataFrame với Lists

Một cách khác để tạo Pandas DataFrame là sử dụng list của dictionary:

>>> l = [{'x': 1, 'y': 2, 'z': 100},
...      {'x': 2, 'y': 4, 'z': 100},
...      {'x': 3, 'y': 8, 'z': 100}]

>>> pd.DataFrame(l)
   x  y    z
0  1  2  100
1  2  4  100
2  3  8  100

Một lần nữa, các key của dictionary là label cột và giá trị dictionary là giá trị dữ liệu trong DataFrame.

Bạn cũng có thể sử dụng nested list hoặc list of lists làm giá trị dữ liệu. Nếu bạn làm vậy, thì bạn nên chỉ định rõ ràng nhãn của cột, hàng hoặc cả hai khi bạn tạo DataFrame:

>>> l = [[1, 2, 100],
...      [2, 4, 100],
...      [3, 8, 100]]

>>> pd.DataFrame(l, columns=['x', 'y', 'z'])
   x  y    z
0  1  2  100
1  2  4  100
2  3  8  100

Đó là cách bạn có thể sử dụng nested list để tạo Pandas DataFrame. Bạn cũng có thể sử dụng list of tuples theo cách tương tự. Để làm như vậy, chỉ cần thay thế các nested liststrong ví dụ trên bằng tuples.

Tạo Pandas DataFrame với NumPy Arrays

Bạn có thể truyền array NumPy hai chiều vào phương thức khởi tạo DataFrame giống như cách bạn làm với danh sách:

>>> arr = np.array([[1, 2, 100],
...                 [2, 4, 100],
...                 [3, 8, 100]])

>>> df_ = pd.DataFrame(arr, columns=['x', 'y', 'z'])
>>> df_
   x  y    z
0  1  2  100
1  2  4  100
2  3  8  100

Mặc dù ví dụ này trông gần giống với cách triển khai nested list ở trên, nhưng nó có một ưu điểm: Bạn có thể chỉ định copy tham số tùy chọn.

Khi copy được đặt thành False (default setting), dữ liệu từ array NumPy sẽ không được sao chép. Điều này có nghĩa là dữ liệu gốc từ array được gán cho Pandas DataFrame. Nếu bạn sửa đổi array, thì DataFrame của bạn cũng sẽ thay đổi:

>>> arr[0, 0] = 1000

>>> df_
      x  y    z
0  1000  2  100
1     2  4  100
2     3  8  100

Như bạn thấy, khi bạn thay đổi mục đầu tiên của arr, bạn cũng sửa đổi df_.

Lưu ý: Việc không copy các giá trị dữ liệu có thể giúp bạn tiết kiệm đáng kể thời gian và sức mạnh xử lý khi làm việc với các tập dữ liệu lớn

Nếu hành động này không như bạn muốn, thì bạn nên chỉ định copy = True trong hàm tạo DataFrame. Bằng cách đó, df_ sẽ được tạo với một bản sao của các giá trị từ arr thay vì các giá trị thực.

Tạo Pandas DataFrame với từ Files

Bạn có thể lưu và tải dữ liệu và label từ Pandas DataFrame đến và từ một số loại tệp, bao gồm CSV, Excel, SQL, JSON, v.v. Đây là một tính năng rất mạnh mẽ.

Bạn có thể lưu dữ liệu từ DataFrame của mình vào tệp CSV với .to_csv ():

>>> df.to_csv('data.csv')

Câu lệnh trên sẽ tạo ra một tệp CSV có tên data.csv trong thư mục làm việc của bạn:

>>> pd.read_csv('data.csv', index_col=0)
   name          city          age  py-score
1  Nam Tran     HCM city       18      82.0
2  Huy Nguyen   Ha Noi city    19      79.0
3  Minh Huy     Ha Noi city    23      89.0
4  Lam Le       Da Nang city   17      96.0
5  Dat Nguyen   HCM city       22      94.0

Đó là cách bạn đọc và lấy dữ liệu Pandas DataFrame từ một tệp. Trong trường hợp này, index_col = 0 chỉ định rằng các nhãn hàng nằm trong cột đầu tiên của tệp CSV.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí