- vừa được xem lúc

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

0 0 28

Người đăng: Nguyen Ngoc Bao

Theo Viblo Asia

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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Thao tác với File trong Python

Python cung cấp các chức năng cơ bản và phương thức cần thiết để thao tác các file. Bài viết này tôi xin giới thiệu những thao tác cơ bản nhất với file trong Python.

0 0 63

- vừa được xem lúc

Tập tành crawl dữ liệu với Scrapy Framework

Lời mở đầu. Chào mọi người, mấy hôm nay mình có tìm hiểu được 1 chút về Scrapy nên muốn viết vài dòng để xem mình đã học được những gì và làm 1 demo nho nhỏ.

0 0 166

- vừa được xem lúc

Sử dụng Misoca API (oauth2) với Python

Với bài viết này giúp chúng ta có thể nắm được. ・Tìm hiểu cách xử lý API misoca bằng Python.

0 0 49

- vừa được xem lúc

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

Tiếp tục phần 2 của series Pandas DataFrame nào. Let's go!!. Ở phần trước, các bạn đã biết được cách lấy dữ liệu một row hoặc column trong Pandas DataFame rồi phải không nào. 6 Hoc.

0 0 63

- vừa được xem lúc

Lập trình socket bằng Python

Socket là gì. Một chức năng khác của socket là giúp các tầng TCP hoặc TCP Layer định danh ứng dụng mà dữ liệu sẽ được gửi tới thông qua sự ràng buộc với một cổng port (thể hiện là một con số cụ thể), từ đó tiến hành kết nối giữa client và server.

0 0 79

- vừa được xem lúc

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

Nào, chúng ta cùng đến với phần 2 của series Pandas DataFrame. Truy xuất Labels và Data. Bạn đã biết cách khởi tạo 1 DataFrame của mình, và giờ bạn có thể truy xuất thông tin từ đó. Với Pandas, bạn có thể thực hiện các thao tác sau:.

0 0 95