Văn phòng: Số 27-3RD, Sunrise D, The Manor Central Park, đường Nguyễn Xiển, phường Đại Kim, quận Hoàng Mai, TP. Hà Nội.
TEK4.VN giữ bản quyền nội dung trên website này. Cấm sao chép dưới mọi hình thức nếu không có sự chấp thuận bằng văn bản.
[và df.shape[1]
để lấy số lượng cột].
shape
linh hoạt và tiện lợi hơn len[]
, đặc biệt là cho công việc tương tác [chỉ cần thêm vào cuối], nhưng len
nhanh hơn một chút [xem thêm câu trả lời này ].
Để tránh
: count[]
vì nó trả về số lượng không phải NA/null quan sát trên trục được yêu cầu
Mục lục bài viết:
- Giới thiệu Pandas DataFrame
- Tạo dữ liệu gấu trúc
- Tạo dữ liệu gấu trúc bằng từ điển
- Tạo dữ liệu gấu trúc với danh sách
- Tạo dữ liệu gấu trúc với Mảng NumPy
- Tạo dữ liệu gấu trúc từ tệp
- Truy xuất nhãn và dữ liệu
- Pandas DataFrame Labels as Sequences
- Dữ liệu dưới dạng Mảng NumPy
- Loại dữ liệu
- Dữ liệu gấu trúc
- Truy cập và sửa đổi dữ liệu
- Nhận dữ liệu với người truy cập
- Thiết lập dữ liệu với trình truy cập
- Chèn và Xóa dữ liệu
- Chèn và xóa hàng
- Chèn và Xóa các Cột
- Áp dụng các phép toán số học
- Áp dụng các hàm NumPy và SciPy
- Sắp xếp dữ liệu gấu trúc
- Lọc dữ liệu
- Xác định thống kê dữ liệu
- Xử lý dữ liệu bị thiếu
- Tính toán với dữ liệu bị thiếu
- Làm đầy dữ liệu bị thiếu
- Xóa hàng và cột có dữ liệu bị thiếu
- Lặp lại trên một dữ liệu gấu trúc
- Làm việc với chuỗi thời gian
- Tạo DataFrames với nhãn chuỗi thời gian
- Lập chỉ mục và cắt lát
- Lấy mẫu lại và cán
- Lập kế hoạch với dữ liệu gấu trúc
- Đọc thêm
- Phần kết luận
Các Pandas DataFrame là một cấu trúc có chứa dữ liệu hai chiều và tương ứng của nó nhãn . DataFrames được sử dụng rộng rãi trong khoa học dữ liệu , máy học , máy tính khoa học và nhiều lĩnh vực sử dụng nhiều dữ liệu khác.
DataFrames tương tự như bảng SQL 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 bảng tính vì chúng là một phần không thể thiếu của hệ sinh thái Python và NumPy .
Trong hướng dẫn này, bạn sẽ học:
- Pandas DataFrame là gì và cách tạo một Pandas DataFrame
- Cách truy cập, sửa đổi, thêm, sắp xếp, lọc và xóa dữ liệu
- Cách xử lý các giá trị bị thiếu
- Cách làm việc với dữ liệu chuỗi thời gian
- Cách nhanh chóng trực quan hóa dữ liệu
Đã đến lúc bắt đầu với Pandas DataFrames!
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 hai thứ nguyên , hàng và cột
- Các nhãn tương ứng với các hàng và cột
Bạn có thể bắt đầu làm việc với DataFrames bằng cách nhập Pandas :
>>>
>>> import pandas as pd
Bây giờ bạn đã nhập Pandas, bạn có thể làm việc với DataFrames.
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 của ứng viên trong bài kiểm tra lập trình Python hoặc py-score
:
101
| Xavier
| Mexico City
| 41
| 88.0
|
102
| Ann
| Toronto
| 28
| 79.0
|
103
| Jana
| Prague
| 33
| 81.0
|
104
| Yi
| Shanghai
| 34
| 80.0
|
105
| Robin
| Manchester
| 38
| 68.0
|
106
| Amal
| Cairo
| 31
| 61.0
|
107
| Nori
| Osaka
| 37
| 84.0
|
Trong bảng này, dòng đầu tiên chứa các nhãn cột [ name
, city
, age
, và py-score
]. Cột đầu tiên chứa các nhãn hàng [ 101
,, 102
v.v.]. Tất cả các ô khác được lấp đầy bở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 DataFrame
tạo 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 PandasSeries
hoặc là một trong một số 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': ['Xavier', 'Ann', 'Jana', 'Yi', 'Robin', 'Amal', 'Nori'],
... 'city': ['Mexico City', 'Toronto', 'Prague', 'Shanghai',
... 'Manchester', 'Cairo', 'Osaka'],
... 'age': [41, 28, 33, 34, 38, 31, 37],
... 'py-score': [88.0, 79.0, 81.0, 80.0, 68.0, 61.0, 84.0]
... }
>>> row_labels = [101, 102, 103, 104, 105, 106, 107]
data
là một biến
Python đề cập đế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-score'
Cuối cùng, row_labels
đề cập đến một danh sách có chứa nhãn của các hàng, là các số từ 101
đến 107
.
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
101 Xavier Mexico City 41 88.0
102 Ann Toronto 28 79.0
103 Jana Prague 33 81.0
104 Yi Shanghai 34 80.0
105 Robin Manchester 38 68.0
106 Amal Cairo 31 61.0
107 Nori Osaka 37 84.0
Đó là nó! 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:
- Các nhãn hàng từ
101
đến107
- Cột nhãn như
'name'
,'city'
,'age'
, và'py-score'
- Dữ liệu như tên ứng viên, thành phố, độ tuổi và điểm kiểm tra Python
Hình này cho thấy các nhãn và dữ liệu từ df
:
Các nhãn hàng được viền màu xanh lam, trong khi các nhãn cột được viền màu đỏ và các giá trị dữ liệu được viền màu tím.
Pandas DataFrames đôi khi 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
101 Xavier Mexico City 41 88.0
102 Ann Toronto 28 79.0
>>> df.tail[n=2]
name city age py-score
106 Amal Cairo 31 61.0
107 Nori Osaka 37 84.0
Đó là cách bạn có thể hiển thị chỉ 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
101 Mexico City
102 Toronto
103 Prague
104 Shanghai
105 Manchester
106 Cairo
107 Osaka
Name: city, dtype: object
Đây là cách thuận tiện nhất để lấy một cột từ Pandas DataFrame.
Nếu tên của cột là một chuỗi là mã định danh Python hợp lệ , thì bạn có thể sử dụng ký hiệu dấu chấm để truy cập nó. Nghĩa là, bạn có thể truy cập cột giống như cách bạn lấy thuộc tính của một cá thể lớp :
>>>
>>> df.city
101 Mexico City
102 Toronto
103 Prague
104 Shanghai
105 Manchester
106 Cairo
107 Osaka
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'
, trong đó có vị trí của tất cả
các ứng viên công việc của bạn.
Điều quan trọng cần lưu ý là bạn đã trích xuất cả dữ liệu và nhãn hàng tương ứng:
Mỗi cột của Pandas DataFrame là một ví dụ của pandas.Series
cấu trúc chứa dữ liệu một chiều và nhãn của chúng. Bạn có thể lấy một mục của một Series
đối tượng giống như cách bạn làm với từ điển, bằng cách
sử dụng nhãn của nó làm khóa:
>>>
>>> cities[102]
'Toronto'
Trong trường hợp này, 'Toronto'
là giá trị dữ liệu và 102
là nhãn 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 vào toàn bộ một hàng với các accessor .loc[]
:
>>>
>>> df.loc[103]
name Jana
city Prague
age 33
py-score 81
Name: 103, dtype: object
Lần này, bạn đã trích xuất hàng tương ứng với nhãn 103
chứa
dữ liệu cho ứng viên được đặt tên Jana
. 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:
Hàng được trả về cũng là một ví dụ của pandas.Series
.
Tạo dữ liệu gấu trúc
Như đã đề cập, có một số cách để tạo Pandas DataFrame. Trong phần này, bạn sẽ học cách làm điều này bằng cách sử dụng hàm DataFrame
tạo cùng với:
- Từ điển Python
- Danh sách Python
- Mảng NumPy hai chiều
- Các tập tin
Ngoài ra còn có các phương pháp khác mà bạn có thể tìm hiểu trong tài liệu chính thức .
Bạn có thể bắt đầu bằng cách nhập Pandas cùng với NumPy , mà bạn sẽ sử dụng trong các ví dụ sau:
>>>
>>> import numpy as np
>>> import pandas as pd
Đó là nó. Bây giờ bạn đã sẵn sàng để tạo một số DataFrames.
Tạo dữ liệu gấu trúc bằng từ điển
Như bạn đã thấy, bạn có thể tạo Pandas DataFrame bằng từ điển Python:
>>>
>>> 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
Các khóa của từ điển là nhãn 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 , danh sách , mảng NumPy một chiều , đối tượng PandasSeries
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 columns
tham số và nhãn hàng bằng index
:
>>>
>>> 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 thấy, bạn
đã chỉ định các nhãn hàng 100
, 200
và 300
. Bạn tôi cũng đã buộc phải theo thứ tự của cột: z
, y
, x
.
Tạo dữ liệu gấu trúc với danh sách
Một cách khác để tạo Pandas DataFrame là sử dụng danh sách các từ điển:
>>>
>>> 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, khóa từ điển là nhãn cột và giá trị từ điển là giá trị dữ liệu trong DataFrame.
Bạn cũng có thể sử dụng danh sách lồng nhau hoặc danh sách các danh sách làm giá trị dữ liệu. Nếu bạn làm vậy, thì nên chỉ định rõ ràng các 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 danh sách lồng nhau để tạo Pandas DataFrame. Bạn cũng có thể sử dụng danh sách các bộ giá trị theo cách tương tự. Để làm như vậy, chỉ cần thay thế các danh sách lồng nhau trong ví dụ trên bằng các bộ giá trị.
Tạo dữ liệu gấu trúc với Mảng NumPy
Bạn có thể truyền mảng NumPy hai chiều cho hàm DataFrame
tạo 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 danh sách lồng nhau ở trên, nhưng nó có một ưu điểm: Bạn có thể chỉ định tham số tùy chọn copy
.
Khi copy
được đặt thành False
[cài đặt
mặc định], dữ liệu từ mảng NumPy sẽ không được sao chép. Điều này có nghĩa là dữ liệu gốc từ mảng được gán cho Pandas DataFrame. Nếu bạn sửa đổi mảng, 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 có thể thấy, khi bạn thay đổi mục đầu tiên arr
, bạn cũng sửa đổi df_
.
Lưu ý: Việc không sao chép 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 vi này không phải là những gì bạn muốn, thì bạn nên chỉ định copy=True
trong hàm DataFrame
tạo. 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ế.
Tạo dữ liệu gấu trúc từ tệp
Bạn có thể lưu và tải dữ liệu và nhãn 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 DataFrame ứng viên công việc 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 gọi data.csv
trong thư mục làm việc của bạn:
,name,city,age,py-score
101,Xavier,Mexico City,41,88.0
102,Ann,Toronto,28,79.0
103,Jana,Prague,33,81.0
104,Yi,Shanghai,34,80.0
105,Robin,Manchester,38,68.0
106,Amal,Cairo,31,61.0
107,Nori,Osaka,37,84.0
Giờ bạn đã có tệp CSV chứa dữ liệu, bạn có thể tải tệp đó bằng read_csv[]
:
>>>
>>> pd.read_csv['data.csv', index_col=0]
name city age py-score
101 Xavier Mexico City 41 88.0
102 Ann Toronto 28 79.0
103 Jana Prague 33 81.0
104 Yi Shanghai 34 80.0
105 Robin Manchester 38 68.0
106 Amal Cairo 31 61.0
107 Nori Osaka 37 84.0
Đó là cách bạn lấy 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.
Truy xuất nhãn và dữ liệu
Bây giờ bạn đã tạo DataFrame của mình, bạn có thể bắt đầu truy xuất thông tin từ nó. Với Pandas, bạn có thể thực hiện các hành động sau:
- Truy xuất và sửa đổi nhãn hàng và cột dưới dạng chuỗi
- Biểu diễn dữ liệu dưới dạng mảng NumPy
- Kiểm tra và điều chỉnh các loại dữ liệu
- Phân tích kích thước của
DataFrame
các đối tượng
Pandas DataFrame Labels as Sequences
Bạn có thể lấy nhãn hàng của DataFrame với .index
và nhãn cột của nó với .columns
:
>>>
>>> df.index
Int64Index[[1, 2, 3, 4, 5, 6, 7], dtype='int64']
>>> df.columns
Index[['name', 'city', 'age', 'py-score'], dtype='object']
Bây giờ bạn có nhãn hàng và cột là các loại chuỗi đặc biệt. Như bạn có thể làm với bất kỳ chuỗi Python nào khác, bạn có thể nhận được một mục duy nhất:
>>>
>>> df.columns[1]
'city'
Ngoài việc trích xuất một mục cụ thể, bạn có thể áp dụng các thao tác trình tự khác, bao gồm cả việc lặp qua các nhãn của hàng hoặc cột. Tuy nhiên, điều này hiếm khi cần thiết vì Pandas cung cấp các cách khác để lặp qua DataFrames mà bạn sẽ thấy trong phần sau .
Bạn cũng có thể sử dụng phương pháp này để sửa đổi các nhãn:
>>>
>>> df.index = np.arange[10, 17]
>>> df.index
Int64Index[[10, 11, 12, 13, 14, 15, 16], dtype='int64']
>>> df
name city age py-score
10 Xavier Mexico City 41 88.0
11 Ann Toronto 28 79.0
12 Jana Prague 33 81.0
13 Yi Shanghai 34 80.0
14 Robin Manchester 38 68.0
15 Amal Cairo 31 61.0
16 Nori Osaka 37 84.0
Trong ví dụ này, bạn sử dụng numpy.arange[]
để tạo một chuỗi nhãn hàng mới chứa các số nguyên
từ 10
đến 16
. Để tìm hiểu thêm arange[]
, hãy xem NumPy arange []: Cách sử dụng np.arange [] .
Hãy nhớ rằng nếu bạn cố gắng sửa đổi một mục cụ thể của .index
hoặc .columns
, thì bạn sẽ nhận được TypeError
.
Dữ liệu dưới dạng Mảng NumPy
Đôi khi bạn có thể muốn trích xuất dữ liệu từ Pandas DataFrame mà không có nhãn của nó. Để nhận mảng NumPy với dữ liệu chưa được gắn nhãn, bạn có thể sử
dụng .to_numpy[]
hoặc .values
:
>>>
>>> df.to_numpy[]
array[[['Xavier', 'Mexico City', 41, 88.0],
['Ann', 'Toronto', 28, 79.0],
['Jana', 'Prague', 33, 81.0],
['Yi', 'Shanghai', 34, 80.0],
['Robin', 'Manchester', 38, 68.0],
['Amal', 'Cairo', 31, 61.0],
['Nori', 'Osaka', 37, 84.0]], dtype=object]
Cả hai .to_numpy[]
và .values
công việc tương tự, và cả hai đều trở lại một mảng với các dữ liệu từ các Pandas DataFrame NumPy:
Tài liệu Pandas đề xuất sử dụng .to_numpy[]
vì tính linh hoạt được cung cấp bởi hai tham số tùy chọn:
dtype
: Sử dụng tham số này để chỉ định kiểu dữ liệu của mảng kết quả. Nó được đặt thànhNone
theo mặc định.copy
: Đặt tham số này thànhFalse
nếu bạn muốn sử dụng dữ liệu gốc từ DataFrame. Đặt nó thànhTrue
nếu bạn muốn tạo một bản sao dữ liệu.
Tuy nhiên, nó .values
đã tồn tại lâu hơn nhiều so với .to_numpy[]
những gì đã được giới thiệu trong phiên bản Pandas 0.24.0. Điều đó có nghĩa là bạn có thể sẽ
thấy .values
thường xuyên hơn, đặc biệt là trong mã cũ hơn.
Loại dữ liệu
Các loại các giá trị dữ liệu , hay còn gọi là kiểu dữ liệu hoặc dtypes , rất quan trọng vì họ xác định dung lượng bộ nhớ sử dụng DataFrame của bạn, cũng như tốc độ tính toán của nó và mức độ chính xác.
Gấu trúc phụ thuộc rất nhiều vào kiểu dữ liệu NumPy . Tuy nhiên, Pandas 1.0 đã giới thiệu một số loại bổ sung:
BooleanDtype
vàBooleanArray
hỗ trợ các giá trị Boolean bị thiếu và lôgic ba giá trị Kleene .StringDtype
vàStringArray
đại diện cho một loại chuỗi chuyên dụng.
Bạn có thể lấy các kiểu dữ liệu cho từng cột của Pandas DataFrame bằng .dtypes
:
>>>
>>> df.dtypes
name object
city object
age int64
py-score float64
dtype: object
Như bạn có thể thấy, .dtypes
trả về một Series
đối tượng có tên cột làm nhãn và kiểu dữ liệu tương ứng dưới dạng giá trị.
Nếu bạn muốn sửa đổi
kiểu dữ liệu của một hoặc nhiều cột, thì bạn có thể sử dụng .astype[]
:
>>>
>>> df_ = df.astype[dtype={'age': np.int32, 'py-score': np.float32}]
>>> df_.dtypes
name object
city object
age int32
py-score float32
dtype: object
Tham số bắt buộc quan trọng nhất và duy nhất của .astype[]
là dtype
. Nó mong đợi một kiểu dữ liệu hoặc từ điển. Nếu bạn chuyển từ điển, thì các khóa là tên cột và các giá trị là kiểu dữ liệu tương ứng mong muốn của bạn.
Như bạn có thể thấy, các kiểu dữ liệu cho các cột age
và py-score
trong DataFrame df
đều int64
, đại
diện cho 64-bit [hoặc 8-byte] số nguyên. Tuy nhiên, df_
cũng cung cấp một kiểu dữ liệu số nguyên 32 bit [4 byte] nhỏ hơn được gọi int32
.
Dữ liệu gấu trúc
Các thuộc tính .ndim
, .size
và .shape
trả lại số kích thước, số lượng các giá trị dữ liệu trên mỗi chiều, và tổng số giá trị dữ liệu, tương ứng:
>>>
>>> df_.ndim
2
>>> df_.shape
[7, 4]
>>> df_.size
28
DataFrame
các phiên bản có hai thứ
nguyên [hàng và cột], do đó, .ndim
trả về 2
. Mặt khác, một Series
đối tượng chỉ có một chiều duy nhất, vì vậy trong trường hợp đó, .ndim
sẽ quay trở lại 1
.
Các .shape
lợi nhuận thuộc tính một tuple với số hàng [trong trường hợp này 7
] và số cột [ 4
]. Cuối cùng, .size
trả về một số nguyên bằng số giá trị trong DataFrame [ 28
].
Bạn thậm chí có thể kiểm tra dung lượng bộ nhớ được sử
dụng bởi mỗi cột với .memory_usage[]
:
>>>
>>> df_.memory_usage[]
Index 56
name 56
city 56
age 28
py-score 28
dtype: int64
Như bạn có thể thấy, .memory_usage[]
trả về một Chuỗi với tên cột làm nhãn và mức sử dụng bộ nhớ tính bằng byte dưới dạng giá trị dữ liệu. Nếu bạn muốn loại trừ việc sử dụng bộ nhớ của cột chứa các nhãn hàng, thì hãy chuyển đối số tùy chọn index=False
.
Trong ví dụ trên, hai cột cuối cùng age
và py-score
sử dụng 28 byte bộ nhớ mỗi cột . Đó
là bởi vì các cột này có bảy giá trị, mỗi giá trị là một số nguyên chiếm 32 bit hoặc 4 byte. Bảy số nguyên nhân với 4 byte, mỗi số tương đương với tổng số 28 byte sử dụng bộ nhớ.
Truy cập và sửa đổi dữ liệu
Bạn đã học cách lấy một hàng hoặc cột cụ thể của Pandas DataFrame làm Series
đối tượng:
>>>
>>> df['name']
10 Xavier
11 Ann
12 Jana
13 Yi
14 Robin
15 Amal
16 Nori
Name: name, dtype: object
>>> df.loc[10]
name Xavier
city Mexico City
age 41
py-score 88
Name: 10, dtype: object
Trong ví dụ đầu tiên, bạn truy cập cột name
như cách
bạn truy cập một phần tử từ từ điển, bằng cách sử dụng nhãn của nó làm khóa. Nếu nhãn cột là một mã định danh Python hợp lệ, thì bạn cũng có thể sử dụng ký hiệu dấu chấm để truy cập cột. Trong ví dụ thứ hai, bạn sử dụng .loc[]
để lấy hàng theo nhãn của nó 10
,.
Nhận dữ liệu với người truy cập
Ngoài trình truy cập .loc[]
mà bạn có thể sử dụng để lấy các hàng hoặc cột theo nhãn của chúng, Pandas cung cấp
trình .iloc[]
truy
cập, truy xuất một hàng hoặc cột theo chỉ mục số nguyên của nó. Trong hầu hết các trường hợp, bạn có thể sử dụng một trong hai cách sau:
>>>
>>> df.loc[10]
name Xavier
city Mexico City
age 41
py-score 88
Name: 10, dtype: object
>>> df.iloc[0]
name Xavier
city Mexico City
age 41
py-score 88
Name: 10, dtype: object
df.loc[10]
trả về hàng có nhãn 10
. Tương tự, df.iloc[0]
trả về hàng có chỉ mục dựa trên 0 0
, là hàng đầu tiên. Như bạn có thể thấy, cả hai câu lệnh đều trả về cùng một hàng như một Series
đối tượng.
Tổng cộng Pandas có bốn người truy cập:
.loc[]
chấp nhận các nhãn của hàng và cột và trả về Chuỗi hoặc Dữ liệu. Bạn có thể sử dụng nó để lấy toàn bộ hàng hoặc cột, cũng như các phần của chúng..iloc[]
chấp nhận các chỉ số dựa trên 0 của các hàng và cột và trả về Series hoặc DataFrames. Bạn có thể sử dụng nó để lấy toàn bộ hàng hoặc cột hoặc các phần của chúng..at[]
chấp nhận nhãn của các hàng và cột và trả về một giá trị dữ liệu duy nhất..iat[]
chấp nhận các chỉ số dựa trên 0 của các hàng và cột và trả về một giá trị dữ liệu duy nhất.
Trong số này, .loc[]
và .iloc[]
đặc biệt mạnh mẽ. Chúng hỗ trợ cắt và lập chỉ mục kiểu NumPy . Bạn có thể sử dụng chúng để truy cập một cột:
>>>
>>> df.loc[:, 'city']
10 Mexico City
11 Toronto
12 Prague
13 Shanghai
14 Manchester
15 Cairo
16 Osaka
Name: city, dtype: object
>>> df.iloc[:, 1]
10 Mexico City
11 Toronto
12 Prague
13 Shanghai
14 Manchester
15 Cairo
16 Osaka
Name: city, dtype: object
df.loc[:, 'city']
trả về cột city
. Cấu trúc lát cắt [ :
] ở vị trí nhãn hàng có nghĩa là tất cả các
hàng phải được đưa vào. df.iloc[:, 1]
trả về cùng một cột vì chỉ mục dựa trên 0 1
tham chiếu đến cột thứ hai city
,.
Cũng giống như bạn có thể làm với NumPy, bạn có thể cung cấp các lát cùng với danh sách hoặc mảng thay vì chỉ số để có nhiều hàng hoặc cột:
>>>
>>> df.loc[11:15, ['name', 'city']]
name city
11 Ann Toronto
12 Jana Prague
13 Yi Shanghai
14 Robin Manchester
15 Amal Cairo
>>> df.iloc[1:6, [0, 1]]
name city
11 Ann Toronto
12 Jana Prague
13 Yi Shanghai
14 Robin Manchester
15 Amal Cairo
Trong ví dụ này, bạn sử dụng:
- Lát để lấy các hàng có nhãn
11
thông qua15
, tương đương với các chỉ số1
thông qua5
- Liệt kê để lấy các cột
name
vàcity
tương đương với các chỉ số0
và1
Cả hai câu lệnh đều trả về một Pandas DataFrame với giao của năm hàng và hai cột mong muốn.
Điều này dẫn đến sự khác biệt rất quan trọng giữa .loc[]
và .iloc[]
. Như bạn có thể nhìn thấy từ ví dụ trước, khi bạn vượt qua các nhãn hàng 11:15
để .loc[]
, bạn sẽ có được các hàng 11
thông
qua 15
. Tuy nhiên, khi bạn chuyển chỉ số hàng 1:6
đến .iloc[]
, bạn chỉ nhận được các hàng có chỉ số 1
đi qua 5
.
Lý do bạn chỉ nhận được các chỉ số 1
thông qua 5
là, với .iloc[]
, chỉ số dừng của một lát cắt là độc quyền , có nghĩa là nó bị loại trừ khỏi các giá trị trả về. Điều này phù hợp với chuỗi Python và mảng NumPy. Với .loc[]
Tuy nhiên, cả hai bắt đầu và dừng
lại chỉ số là bao gồm , có nghĩa là họ được bao gồm với các giá trị trả lại.
Bạn có thể bỏ qua các hàng và cột .iloc[]
theo cách tương tự với cách cắt các bộ giá trị, danh sách và mảng NumPy:
>>>
>>> df.iloc[1:6:2, 0]
11 Ann
13 Yi
15 Amal
Name: name, dtype: object
Trong ví dụ này, bạn chỉ định các chỉ số hàng mong muốn với lát cắt 1:6:2
. Điều này có nghĩa là bạn bắt đầu với hàng có chỉ mục 1
[hàng thứ hai], dừng lại trước hàng có chỉ mục 6
[hàng thứ bảy] và bỏ qua mọi
hàng thứ hai.
Thay vì sử dụng cấu trúc cắt, bạn cũng có thể sử dụng lớp Python được tích hợp sẵn slice[]
, cũng như numpy.s_[]
hoặc pd.IndexSlice[]
:
>>>
>>> df.iloc[slice[1, 6, 2], 0]
11 Ann
13 Yi
15 Amal
Name: name, dtype: object
>>> df.iloc[np.s_[1:6:2], 0]
11 Ann
13 Yi
15 Amal
Name: name, dtype: object
>>> df.iloc[pd.IndexSlice[1:6:2], 0]
11 Ann
13 Yi
15 Amal
Name: name, dtype: object
Bạn có thể thấy một trong những cách tiếp cận này thuận tiện hơn những cách khác tùy thuộc vào tình huống của bạn.
Có thể sử dụng .loc[]
và .iloc[]
lấy các giá trị dữ liệu cụ thể. Tuy nhiên, khi bạn chỉ cần một giá trị duy nhất,
Pandas khuyên bạn nên sử dụng các trình truy cập chuyên dụng .at[]
và .iat[]
:
>>>
>>> df.at[12, 'name']
'Jana'
>>> df.iat[2, 0]
'Jana'
Ở đây, bạn đã sử dụng .at[]
để lấy tên của một ứng cử viên bằng cách sử dụng các nhãn cột và hàng tương ứng của nó. Bạn cũng đã sử dụng .iat[]
để truy xuất cùng một tên bằng cách sử dụng các chỉ số cột và hàng của nó.
Thiết lập dữ liệu với trình truy cập
Bạn có thể sử dụng trình truy cập để sửa đổi các phần của Pandas DataFrame bằng cách chuyển một chuỗi Python, mảng NumPy hoặc giá trị đơn lẻ:
>>>
>>> df.loc[:, 'py-score']
10 88.0
11 79.0
12 81.0
13 80.0
14 68.0
15 61.0
16 84.0
Name: py-score, dtype: float64
>>> df.loc[:13, 'py-score'] = [40, 50, 60, 70]
>>> df.loc[14:, 'py-score'] = 0
>>> df['py-score']
10 40.0
11 50.0
12 60.0
13 70.0
14 0.0
15 0.0
16 0.0
Name: py-score, dtype: float64
Câu lệnh df.loc[:13, 'py-score'] = [40, 50, 60, 70]
sửa đổi bốn mục đầu tiên [từ hàng 10
đến 13
] trong cột py-score
bằng cách sử dụng các giá trị từ danh sách được cung cấp của bạn. Sử dụng df.loc[14:, 'py-score'] = 0
đặt các giá trị còn lại trong cột này thành 0
.
Ví dụ sau cho thấy rằng bạn có thể sử
dụng các chỉ số phủ định .iloc[]
để truy cập hoặc sửa đổi dữ liệu:
>>>
>>> df.iloc[:, -1] = np.array[[88.0, 79.0, 81.0, 80.0, 68.0, 61.0, 84.0]]
>>> df['py-score']
10 88.0
11 79.0
12 81.0
13 80.0
14 68.0
15 61.0
16 84.0
Name: py-score, dtype: float64
Trong ví dụ này, bạn đã truy cập và sửa đổi cột cuối cùng [ 'py-score'
], tương ứng với chỉ mục cột số nguyên -1
. Hành vi này phù hợp với chuỗi Python và mảng NumPy.
Chèn và Xóa dữ liệu
Pandas cung cấp một số kỹ thuật tiện lợi để chèn và xóa hàng hoặc cột. Bạn có thể chọn trong số họ dựa trên tình hình và nhu cầu của bạn.
Chèn và xóa hàng
Hãy tưởng tượng bạn muốn thêm một người mới vào danh sách ứng viên tuyển dụng của mình. Bạn có thể bắt đầu bằng cách tạo một Series
đối tượng mới đại diện cho ứng cử viên mới này:
>>>
>>> john = pd.Series[data=['John', 'Boston', 34, 79],
... index=df.columns, name=17]
>>> john
name John
city Boston
age 34
py-score 79
Name: 17, dtype: object
>>> john.name
17
Đối tượng mới có các nhãn tương ứng với các nhãn cột từ df
. Đó là lý do tại sao bạn cần index=df.columns
.
Bạn có thể thêm john
dưới
dạng một hàng mới vào cuối df
bằng .append[]
:
>>>
>>> df = df.append[john]
>>> df
name city age py-score
10 Xavier Mexico City 41 88.0
11 Ann Toronto 28 79.0
12 Jana Prague 33 81.0
13 Yi Shanghai 34 80.0
14 Robin Manchester 38 68.0
15 Amal Cairo 31 61.0
16 Nori Osaka 37 84.0
17 John Boston 34 79.0
Tại đây, .append[]
trả về Pandas DataFrame với hàng mới được thêm vào. Lưu ý cách Pandas sử dụng thuộc tính john.name
, là giá trị 17
, để chỉ định nhãn cho hàng mới.
Bạn đã thêm một hàng mới với một lệnh gọi đến .append[]
và bạn có thể xóa hàng đó bằng một lệnh gọi tới .drop[]
:
>>>
>>> df = df.drop[labels=[17]]
>>> df
name city age py-score
10 Xavier Mexico City 41 88.0
11 Ann Toronto 28 79.0
12 Jana Prague 33 81.0
13 Yi Shanghai 34 80.0
14 Robin Manchester 38 68.0
15 Amal Cairo 31 61.0
16 Nori Osaka 37 84.0
Tại đây, .drop[]
xóa các hàng
được chỉ định với tham số labels
. Theo mặc định, nó trả về Pandas DataFrame với các hàng được chỉ định đã bị xóa. Nếu bạn vượt qua inplace=True
, thì DataFrame ban đầu sẽ được sửa đổi và bạn sẽ nhận được None
dưới dạng giá trị trả về.
Chèn và Xóa các Cột
Cách đơn giản nhất để chèn một cột trong Pandas DataFrame là làm theo cùng một quy trình mà bạn sử dụng khi thêm một mục vào từ điển . Đây là cách bạn có thể thêm một cột chứa điểm của ứng viên của bạn trong một bài kiểm tra JavaScript :
>>>
>>> df['js-score'] = np.array[[71.0, 95.0, 88.0, 79.0, 91.0, 91.0, 80.0]]
>>> df
name city age py-score js-score
10 Xavier Mexico City 41 88.0 71.0
11 Ann Toronto 28 79.0 95.0
12 Jana Prague 33 81.0 88.0
13 Yi Shanghai 34 80.0 79.0
14 Robin Manchester 38 68.0 91.0
15 Amal Cairo 31 61.0 91.0
16 Nori Osaka 37 84.0 80.0
Bây giờ DataFrame ban đầu có thêm một cột js-score
, ở cuối.
Bạn không cần phải cung cấp một chuỗi giá trị đầy đủ. Bạn có thể thêm một cột mới với một giá trị duy nhất:
>>>
>>> df['total-score'] = 0.0
>>> df
name city age py-score js-score total-score
10 Xavier Mexico City 41 88.0 71.0 0.0
11 Ann Toronto 28 79.0 95.0 0.0
12 Jana Prague 33 81.0 88.0 0.0
13 Yi Shanghai 34 80.0 79.0 0.0
14 Robin Manchester 38 68.0 91.0 0.0
15 Amal Cairo 31 61.0 91.0 0.0
16 Nori Osaka 37 84.0 80.0 0.0
DataFrame df
hiện có một cột bổ sung chứa các số không.
Nếu bạn đã sử dụng từ điển trước đây, thì cách chèn cột
này có thể quen thuộc với bạn. Tuy nhiên, nó không cho phép bạn chỉ định vị trí của cột mới. Nếu vị trí của cột mới là quan trọng, thì bạn có thể sử dụng .insert[]
thay thế:
>>>
>>> df.insert[loc=4, column='django-score',
... value=np.array[[86.0, 81.0, 78.0, 88.0, 74.0, 70.0, 81.0]]]
>>> df
name city age py-score django-score js-score total-score
10 Xavier Mexico City 41 88.0 86.0 71.0 0.0
11 Ann Toronto 28 79.0 81.0 95.0 0.0
12 Jana Prague 33 81.0 78.0 88.0 0.0
13 Yi Shanghai 34 80.0 88.0 79.0 0.0
14 Robin Manchester 38 68.0 74.0 91.0 0.0
15 Amal Cairo 31 61.0 70.0 91.0 0.0
16 Nori Osaka 37 84.0 81.0 80.0 0.0
Bạn vừa chèn một cột khác có điểm của bài kiểm tra Django . Tham số loc
xác định vị trí hoặc chỉ mục dựa trên 0 của cột mới trong Pandas DataFrame. column
đặt nhãn của cột mới và value
chỉ
định các giá trị dữ liệu để chèn.
Bạn có thể xóa một hoặc nhiều cột khỏi Pandas DataFrame giống như cách bạn làm với từ điển Python thông thường, bằng cách sử dụng del
câu lệnh :
>>>
>>> del df['total-score']
>>> df
name city age py-score django-score js-score
10 Xavier Mexico City 41 88.0 86.0 71.0
11 Ann Toronto 28 79.0 81.0 95.0
12 Jana Prague 33 81.0 78.0 88.0
13 Yi Shanghai 34 80.0 88.0 79.0
14 Robin Manchester 38 68.0 74.0 91.0
15 Amal Cairo 31 61.0 70.0 91.0
16 Nori Osaka 37 84.0 81.0 80.0
Bây giờ bạn có df
mà không có cột total-score
. Một điểm tương đồng khác với từ điển là khả năng sử dụng .pop[]
, loại bỏ cột được chỉ định và trả lại cột đó. Điều đó có nghĩa là bạn có thể làm điều gì đó giống như df.pop['total-score']
thay
vì sử dụng del
.
Bạn cũng có thể xóa một hoặc nhiều cột .drop[]
như bạn đã làm trước đó với các hàng. Một lần nữa, bạn cần chỉ định nhãn của các cột mong muốn với labels
. Ngoài ra, khi bạn muốn loại bỏ các cột, bạn cần cung cấp đối số axis=1
:
>>>
>>> df = df.drop[labels='age', axis=1]
>>> df
name city py-score django-score js-score
10 Xavier Mexico City 88.0 86.0 71.0
11 Ann Toronto 79.0 81.0 95.0
12 Jana Prague 81.0 78.0 88.0
13 Yi Shanghai 80.0 88.0 79.0
14 Robin Manchester 68.0 74.0 91.0
15 Amal Cairo 61.0 70.0 91.0
16 Nori Osaka 84.0 81.0 80.0
Bạn đã xóa cột age
khỏi DataFrame của mình.
Theo mặc định, .drop[]
trả về DataFrame không có các cột được chỉ
định trừ khi bạn vượt qua inplace=True
.
Áp dụng các phép toán số học
Bạn có thể áp dụng các phép toán số học cơ bản như cộng, trừ, nhân và chia cho Pandas Series
và DataFrame
các đối tượng giống như cách bạn làm với mảng NumPy :
>>>
>>> df['py-score'] + df['js-score']
10 159.0
11 174.0
12 169.0
13 159.0
14 159.0
15 152.0
16 164.0
dtype: float64
>>> df['py-score'] / 100
10 0.88
11 0.79
12 0.81
13 0.80
14 0.68
15 0.61
16 0.84
Name: py-score, dtype: float64
Bạn có thể sử dụng kỹ thuật này để chèn một cột mới vào Pandas DataFrame. Ví dụ: hãy thử tính total
điểm dưới dạng kết hợp tuyến tính của
điểm Python, Django và JavaScript của ứng viên của bạn:
>>>
>>> df['total'] =\
... 0.4 * df['py-score'] + 0.3 * df['django-score'] + 0.3 * df['js-score']
>>> df
name city py-score django-score js-score total
10 Xavier Mexico City 88.0 86.0 71.0 82.3
11 Ann Toronto 79.0 81.0 95.0 84.4
12 Jana Prague 81.0 78.0 88.0 82.2
13 Yi Shanghai 80.0 88.0 79.0 82.1
14 Robin Manchester 68.0 74.0 91.0 76.7
15 Amal Cairo 61.0 70.0 91.0 72.7
16 Nori Osaka 84.0 81.0 80.0 81.9
Bây giờ DataFrame của bạn có một cột với total
điểm được tính từ điểm kiểm tra cá nhân của ứng viên của bạn. Tuyệt vời hơn nữa, bạn đã đạt được điều đó chỉ với một câu nói duy nhất!
Áp dụng các hàm NumPy và SciPy
Hầu hết các quy trình NumPy và SciPy có thể được áp dụng cho Pandas Series
hoặc DataFrame
đối
tượng dưới dạng đối số thay vì dưới dạng mảng NumPy. Để minh họa điều này, bạn có thể tính toán tổng điểm kiểm tra của các ứng viên bằng cách sử dụng quy trình NumPy numpy.average[]
.
Thay vì chuyển một mảng NumPy sang numpy.average[]
, bạn sẽ chuyển một phần của Pandas DataFrame của mình:
>>>
>>> import numpy as np
>>> score = df.iloc[:, 2:5]
>>> score
py-score django-score js-score
10 88.0 86.0 71.0
11 79.0 81.0 95.0
12 81.0 78.0 88.0
13 80.0 88.0 79.0
14 68.0 74.0 91.0
15 61.0 70.0 91.0
16 84.0 81.0 80.0
>>> np.average[score, axis=1,
... weights=[0.4, 0.3, 0.3]]
array[[82.3, 84.4, 82.2, 82.1, 76.7, 72.7, 81.9]]
Hiện score
tại, biến này đề cập đến DataFrame với điểm số Python, Django và JavaScript. Bạn có thể sử dụng score
làm đối số numpy.average[]
và
lấy kết hợp tuyến tính của các cột với trọng số được chỉ định.
Nhưng đó không phải là tất cả! Bạn có thể sử dụng mảng NumPy được trả về average[]
như một cột mới của df
. Trước tiên, xóa cột hiện có total
khỏi df
, sau đó nối cột mới bằng cách sử dụng average[]
:
>>>
>>> del df['total']
>>> df
name city py-score django-score js-score
10 Xavier Mexico City 88.0 86.0 71.0
11 Ann Toronto 79.0 81.0 95.0
12 Jana Prague 81.0 78.0 88.0
13 Yi Shanghai 80.0 88.0 79.0
14 Robin Manchester 68.0 74.0 91.0
15 Amal Cairo 61.0 70.0 91.0
16 Nori Osaka 84.0 81.0 80.0
>>> df['total'] = np.average[df.iloc[:, 2:5], axis=1,
... weights=[0.4, 0.3, 0.3]]
>>> df
name city py-score django-score js-score total
10 Xavier Mexico City 88.0 86.0 71.0 82.3
11 Ann Toronto 79.0 81.0 95.0 84.4
12 Jana Prague 81.0 78.0 88.0 82.2
13 Yi Shanghai 80.0 88.0 79.0 82.1
14 Robin Manchester 68.0 74.0 91.0 76.7
15 Amal Cairo 61.0 70.0 91.0 72.7
16 Nori Osaka 84.0 81.0 80.0 81.9
Kết quả tương tự như trong ví dụ trước, nhưng ở đây bạn đã sử dụng hàm NumPy hiện có thay vì viết mã của riêng bạn.
Sắp xếp dữ liệu gấu trúc
Bạn có thể sắp xếp một Pandas DataFrame với .sort_values[]
:
>>>
>>> df.sort_values[by='js-score', ascending=False]
name city py-score django-score js-score total
11 Ann Toronto 79.0 81.0 95.0 84.4
14 Robin Manchester 68.0 74.0 91.0 76.7
15 Amal Cairo 61.0 70.0 91.0 72.7
12 Jana Prague 81.0 78.0 88.0 82.2
16 Nori Osaka 84.0 81.0 80.0 81.9
13 Yi Shanghai 80.0 88.0 79.0 82.1
10 Xavier Mexico City 88.0 86.0 71.0 82.3
Ví dụ này sắp xếp DataFrame của bạn theo các giá trị trong cột js-score
. Tham số by
đặt nhãn của hàng hoặc cột để sắp xếp theo. ascending
chỉ định xem bạn muốn sắp xếp theo thứ tự tăng dần [ True
] hay giảm dần [ False
], thứ tự sau là cài đặt mặc định. Bạn có thể vượt qua axis
để
chọn nếu bạn muốn sắp xếp hàng [ axis=0
] hoặc cột [ axis=1
].
Nếu bạn muốn sắp xếp theo nhiều cột, thì chỉ cần chuyển danh sách làm đối số cho by
và ascending
:
>>>
>>> df.sort_values[by=['total', 'py-score'], ascending=[False, False]]
name city py-score django-score js-score total
11 Ann Toronto 79.0 81.0 95.0 84.4
10 Xavier Mexico City 88.0 86.0 71.0 82.3
12 Jana Prague 81.0 78.0 88.0 82.2
13 Yi Shanghai 80.0 88.0 79.0 82.1
16 Nori Osaka 84.0 81.0 80.0 81.9
14 Robin Manchester 68.0 74.0 91.0 76.7
15 Amal Cairo 61.0 70.0 91.0 72.7
Trong trường hợp này, DataFrame được sắp xếp theo cột total
, nhưng nếu hai giá trị giống nhau, thì thứ tự của chúng được xác định bởi các giá trị từ cột py-score
.
Tham số tùy chọn inplace
cũng có thể được sử dụng với .sort_values[]
. Nó
được đặt thành False
theo mặc định, đảm bảo .sort_values[]
trả về một Pandas DataFrame mới. Khi bạn đặt inplace=True
, DataFrame hiện có sẽ được sửa đổi và .sort_values[]
sẽ trở lại None
.
Nếu bạn đã từng cố gắng sắp xếp các giá trị trong Excel , thì bạn có thể thấy cách tiếp cận Pandas hiệu quả và tiện lợi hơn nhiều. Khi bạn có một lượng lớn dữ liệu, Pandas có thể vượt trội hơn đáng kể so với Excel.
Để biết thêm thông tin về cách sắp xếp trong Gấu trúc, hãy xem Sắp xếp theo gấu trúc: Hướng dẫn sắp xếp dữ liệu bằng Python của bạn .
Lọc dữ liệu
Lọc dữ liệu là một tính năng mạnh mẽ khác của Pandas. Nó hoạt động tương tự như lập chỉ mục với mảng Boolean trong NumPy .
Nếu bạn áp dụng một số hoạt động logic trên một Series
đối tượng, thì bạn sẽ nhận được một Chuỗi khác với các giá trị Boolean True
và False
:
>>>
>>> filter_ = df['django-score'] >= 80
>>> filter_
10 True
11 True
12 False
13 True
14 False
15 False
16 True
Name: django-score, dtype: bool
Trong
trường hợp này, df['django-score'] >= 80
trả về True
cho những hàng có điểm Django lớn hơn hoặc bằng 80. Nó trả về False
cho những hàng có điểm Django nhỏ hơn 80.
Bây giờ bạn có Chuỗi filter_
chứa đầy dữ liệu Boolean. Biểu thức df[filter_]
trả về một Pandas DataFrame với các hàng từ df
đó tương ứng với True
trong filter_
:
>>>
>>> df[filter_]
name city py-score django-score js-score total
10 Xavier Mexico City 88.0 86.0 71.0 82.3
11 Ann Toronto 79.0 81.0 95.0 84.4
13 Yi Shanghai 80.0 88.0 79.0 82.1
16 Nori Osaka 84.0 81.0 80.0 81.9
Như bạn có thể thấy, filter_[10]
, filter_[11]
, filter_[13]
,
và filter_[16]
là True
,
do đó df[filter_]
chứa các hàng với các nhãn này. Mặt khác, filter_[12]
, filter_[14]
, và filter_[15]
là False
, vì vậy các hàng tương ứng không xuất hiện trong df[filter_]
.
Bạn có thể tạo các biểu thức rất mạnh mẽ và phức tạp bằng cách kết hợp các phép toán logic với các toán tử sau:
NOT
[~
]AND
[&
]OR
[|
]XOR
[^
]
Ví dụ: bạn có thể nhận được DataFrame với
các ứng viên có py-score
và js-score
lớn hơn hoặc bằng 80:
>>>
>>> df[[df['py-score'] >= 80] & [df['js-score'] >= 80]]
name city py-score django-score js-score total
12 Jana Prague 81.0 78.0 88.0 82.2
16 Nori Osaka 84.0 81.0 80.0 81.9
Biểu thức [df['py-score'] >= 80] & [df['js-score'] >= 80]
trả về một Chuỗi có True
trong các hàng có cả hai py-score
và js-score
lớn hơn hoặc bằng 80 và False
các hàng khác. Trong trường hợp này, chỉ các hàng có nhãn 12
và 16
thỏa mãn cả hai điều kiện.
Bạn cũng có thể áp dụng các quy trình logic NumPy thay vì các toán tử.
Đối với một số thao tác yêu
cầu lọc dữ liệu, sẽ thuận tiện hơn khi sử dụng .where[]
. Nó thay thế các giá trị ở các vị trí mà điều kiện đã cung cấp không được thỏa mãn:
>>>
>>> df['django-score'].where[cond=df['django-score'] >= 80, other=0.0]
10 86.0
11 81.0
12 0.0
13 88.0
14 0.0
15 0.0
16 81.0
Name: django-score, dtype: float64
Trong ví dụ này, điều kiện là df['django-score'] >= 80
. Các giá trị của DataFrame hoặc Chuỗi .where[]
sẽ được giữ nguyên khi có điều kiện True
và sẽ được thay thế bằng giá trị của other
[trong trường hợp này 0.0
] khi có điều kiện False
.
Xác định thống kê dữ liệu
Pandas cung cấp nhiều phương pháp thống kê cho DataFrames. Bạn có thể nhận thống kê cơ bản cho các cột số của Pandas DataFrame với .describe[]
:
>>>
>>> df.describe[]
py-score django-score js-score total
count 7.000000 7.000000 7.000000 7.000000
mean 77.285714 79.714286 85.000000 80.328571
std 9.446592 6.343350 8.544004 4.101510
min 61.000000 70.000000 71.000000 72.700000
25% 73.500000 76.000000 79.500000 79.300000
50% 80.000000 81.000000 88.000000 82.100000
75% 82.500000 83.500000 91.000000 82.250000
max 88.000000 88.000000 95.000000 84.400000
Tại đây, .describe[]
trả về một DataFrame mới với số hàng được chỉ định bởi count
, cũng như giá trị trung bình, độ lệch chuẩn, tối thiểu, tối đa và phần tư của các cột.
Nếu bạn muốn nhận thống kê cụ thể cho
một số hoặc tất cả các cột của mình, thì bạn có thể gọi các phương thức như .mean[]
hoặc .std[]
:
>>>
>>> df.mean[]
py-score 77.285714
django-score 79.714286
js-score 85.000000
total 80.328571
dtype: float64
>>> df['py-score'].mean[]
77.28571428571429
>>> df.std[]
py-score 9.446592
django-score 6.343350
js-score 8.544004
total 4.101510
dtype: float64
>>> df['py-score'].std[]
9.446591726019244
Khi được áp dụng cho Pandas DataFrame, các phương pháp này trả về Chuỗi với kết quả cho mỗi cột. Khi được áp dụng cho một Series
đối tượng hoặc một cột của DataFrame, các phương thức này sẽ trả về giá trị vô hướng .
Để tìm hiểu thêm về tính toán thống kê với Gấu trúc, hãy xem Thống kê mô tả với Python và NumPy, SciPy và Pandas: Tương quan với Python .
Xử lý dữ liệu bị thiếu
Dữ liệu bị thiếu là rất phổ biến trong khoa học dữ liệu và học máy. Nhưng đừng bao giờ sợ hãi! Pandas có các tính năng rất mạnh để làm việc với dữ liệu bị thiếu. Trên thực tế, tài liệu của nó có toàn bộ phần dành riêng để làm việc với dữ liệu bị thiếu .
Gấu trúc thường đại diện cho dữ liệu bị thiếu bằng giá trị NaN [không phải số] . Trong
Python, bạn có thể nhận NaN với float['nan']
, math.nan
hoặc numpy.nan
. Bắt đầu với Pandas 1.0, loại mới thích BooleanDtype
, Int8Dtype
, Int16Dtype
, Int32Dtype
, và Int64Dtype
sử dụng pandas.NA
như một giá trị bị mất tích.
Dưới đây là ví dụ về Pandas DataFrame bị thiếu giá trị:
>>>
>>> df_ = pd.DataFrame[{'x': [1, 2, np.nan, 4]}]
>>> df_
x
0 1.0
1 2.0
2 NaN
3 4.0
Biến df_
tham chiếu đến DataFrame với một cột x
và bốn giá trị. Giá trị thứ ba nan
được coi là bị thiếu theo
mặc định.
Tính toán với dữ liệu bị thiếu
Nhiều phương thức Pandas bỏ qua nan
các giá trị khi thực hiện tính toán trừ khi chúng được hướng dẫn rõ ràng là không :
>>>
>>> df_.mean[]
x 2.333333
dtype: float64
>>> df_.mean[skipna=False]
x NaN
dtype: float64
Trong ví dụ đầu tiên, df_.mean[]
tính giá trị trung bình mà không tính đến NaN
[giá trị thứ ba]. Nó chỉ mất 1.0
, 2.0
và 4.0
và trả trung bình của họ, đó là 2,33.
Tuy nhiên,
nếu bạn hướng dẫn .mean[]
không bỏ qua nan
các giá trị với skipna=False
, thì nó sẽ xem xét chúng và trả về nan
nếu có bất kỳ giá trị nào bị thiếu trong số dữ liệu.
Làm đầy dữ liệu bị thiếu
Pandas có một số tùy chọn để điền hoặc thay thế các giá trị bị thiếu bằng các giá trị khác. Một trong những phương pháp thuận tiện nhất là .fillna[]
. Bạn có thể sử dụng nó để thay thế các giá trị bị thiếu bằng:
- Các giá trị được chỉ định
- Các giá trị trên giá trị bị thiếu
- Các giá trị dưới giá trị bị thiếu
Đây là cách bạn có thể áp dụng các tùy chọn được đề cập ở trên:
>>>
>>> df_.fillna[value=0]
x
0 1.0
1 2.0
2 0.0
3 4.0
>>> df_.fillna[method='ffill']
x
0 1.0
1 2.0
2 2.0
3 4.0
>>> df_.fillna[method='bfill']
x
0 1.0
1 2.0
2 4.0
3 4.0
Trong ví dụ đầu tiên, hãy .fillna[value=0]
thay thế giá trị bị thiếu bằng 0.0
mà bạn đã chỉ định value
. Trong ví dụ thứ hai, .fillna[method='ffill']
thay thế giá trị bị thiếu bằng giá trị ở trên nó, giá trị này 2.0
. Trong ví dụ thứ ba, .fillna[method='bfill']
sử
dụng giá trị bên dưới giá trị bị thiếu, đó là 4.0
.
Một lựa chọn phổ biến khác là áp dụng phép nội suy và thay thế các giá trị bị thiếu bằng các giá trị được nội suy. Bạn có thể làm điều này với .interpolate[]
:
>>>
>>> df_.interpolate[]
x
0 1.0
1 2.0
2 3.0
3 4.0
Như bạn có thể thấy, hãy .interpolate[]
thay thế giá trị bị thiếu bằng một giá trị nội suy.
Bạn cũng có thể sử dụng tham số tùy chọn inplace
với .fillna[]
. Làm như vậy sẽ:
- Tạo và trả về
DataFrame mới khi
inplace=False
- Sửa đổi DataFrame hiện có và trả lại
None
khiinplace=True
Cài đặt mặc định cho inplace
là False
. Tuy nhiên, inplace=True
có thể rất hữu ích khi bạn đang làm việc với một lượng lớn dữ liệu và muốn ngăn việc sao chép không cần thiết và không hiệu quả.
Xóa hàng và cột có dữ liệu bị thiếu
Trong một số trường hợp nhất định, bạn có thể muốn xóa các hàng hoặc thậm chí các cột
có giá trị bị thiếu. Bạn có thể làm điều này với .dropna[]
:
>>>
>>> df_.dropna[]
x
0 1.0
1 2.0
3 4.0
Trong trường hợp này, .dropna[]
chỉ cần xóa hàng có nan
, bao gồm cả nhãn của hàng đó. Nó cũng có tham số tùy chọn inplace
, hoạt động giống như với .fillna[]
và .interpolate[]
.
Lặp lại trên một dữ liệu gấu trúc
Như bạn đã học trước đó, các nhãn hàng và cột của DataFrame có thể được truy xuất dưới dạng chuỗi
với .index
và .columns
. Bạn có thể sử dụng tính năng này để lặp lại các nhãn và lấy hoặc đặt các giá trị dữ liệu. Tuy nhiên, Pandas cung cấp một số phương pháp thuận tiện hơn để lặp lại:
.items[]
để lặp qua các cột.iteritems[]
để lặp qua các cột.iterrows[]
để lặp qua các hàng.itertuples[]
để lặp qua các hàng và nhận các bộ giá trị được đặt tên
Với .items[]
và .iteritems[]
, bạn lặp qua các cột của Pandas
DataFrame. Mỗi lần lặp tạo ra một bộ dữ liệu với tên của cột và dữ liệu cột dưới dạng một Series
đối tượng:
>>>
>>> for col_label, col in df.iteritems[]:
... print[col_label, col, sep='\n', end='\n\n']
...
name
10 Xavier
11 Ann
12 Jana
13 Yi
14 Robin
15 Amal
16 Nori
Name: name, dtype: object
city
10 Mexico City
11 Toronto
12 Prague
13 Shanghai
14 Manchester
15 Cairo
16 Osaka
Name: city, dtype: object
py-score
10 88.0
11 79.0
12 81.0
13 80.0
14 68.0
15 61.0
16 84.0
Name: py-score, dtype: float64
django-score
10 86.0
11 81.0
12 78.0
13 88.0
14 74.0
15 70.0
16 81.0
Name: django-score, dtype: float64
js-score
10 71.0
11 95.0
12 88.0
13 79.0
14 91.0
15 91.0
16 80.0
Name: js-score, dtype: float64
total
10 82.3
11 84.4
12 82.2
13 82.1
14 76.7
15 72.7
16 81.9
Name: total, dtype: float64
Đó là cách bạn sử dụng .items[]
và .iteritems[]
.
Với .iterrows[]
, bạn lặp lại các hàng của Pandas DataFrame. Mỗi lần lặp tạo ra một bộ giá trị với tên của hàng và dữ liệu hàng dưới dạng một Series
đối tượng:
>>>
>>> for row_label, row in df.iterrows[]:
... print[row_label, row, sep='\n', end='\n\n']
...
10
name Xavier
city Mexico City
py-score 88
django-score 86
js-score 71
total 82.3
Name: 10, dtype: object
11
name Ann
city Toronto
py-score 79
django-score 81
js-score 95
total 84.4
Name: 11, dtype: object
12
name Jana
city Prague
py-score 81
django-score 78
js-score 88
total 82.2
Name: 12, dtype: object
13
name Yi
city Shanghai
py-score 80
django-score 88
js-score 79
total 82.1
Name: 13, dtype: object
14
name Robin
city Manchester
py-score 68
django-score 74
js-score 91
total 76.7
Name: 14, dtype: object
15
name Amal
city Cairo
py-score 61
django-score 70
js-score 91
total 72.7
Name: 15, dtype: object
16
name Nori
city Osaka
py-score 84
django-score 81
js-score 80
total 81.9
Name: 16, dtype: object
Đó là cách bạn sử dụng .iterrows[]
.
Tương
tự, .itertuples[]
lặp
qua các hàng và trong mỗi lần lặp lại tạo ra một bộ được đặt tên với [tùy chọn] chỉ mục và dữ liệu:
>>>
>>> for row in df.loc[:, ['name', 'city', 'total']].itertuples[]:
... print[row]
...
Pandas[Index=10, name='Xavier', city='Mexico City', total=82.3]
Pandas[Index=11, name='Ann', city='Toronto', total=84.4]
Pandas[Index=12, name='Jana', city='Prague', total=82.19999999999999]
Pandas[Index=13, name='Yi', city='Shanghai', total=82.1]
Pandas[Index=14, name='Robin', city='Manchester', total=76.7]
Pandas[Index=15, name='Amal', city='Cairo', total=72.7]
Pandas[Index=16, name='Nori', city='Osaka', total=81.9]
Bạn có thể chỉ định tên của tuple đã đặt tên với tham số name
được đặt thành 'Pandas'
theo mặc định. Bạn cũng có thể chỉ định xem có bao gồm các nhãn hàng hay không index
, được đặt thành True
theo mặc định.
Làm việc với chuỗi thời gian
Gấu trúc vượt trội trong việc xử lý chuỗi thời gian . Mặc dù chức năng này một phần dựa trên lịch ngày và thời gian của NumPy , nhưng Pandas cung cấp tính linh hoạt hơn nhiều.
Tạo DataFrames với nhãn chuỗi thời gian
Trong phần này, bạn sẽ tạo Pandas DataFrame bằng cách sử dụng dữ liệu nhiệt độ hàng giờ của một ngày.
Bạn có thể bắt đầu bằng cách tạo một danh sách [hoặc bộ, mảng NumPy hoặc kiểu dữ liệu khác] với các giá trị dữ liệu, sẽ là nhiệt độ hàng giờ được tính bằng độ C :
>>>
>>> temp_c = [ 8.0, 7.1, 6.8, 6.4, 6.0, 5.4, 4.8, 5.0,
... 9.1, 12.8, 15.3, 19.1, 21.2, 22.1, 22.4, 23.1,
... 21.0, 17.9, 15.5, 14.4, 11.9, 11.0, 10.2, 9.1]
Bây giờ bạn có biến temp_c
, tham chiếu đến danh sách các giá trị nhiệt độ.
Bước tiếp theo là tạo một chuỗi ngày và giờ. Pandas cung cấp một chức năng rất tiện lợi date_range[]
, cho mục đích này:
>>>
>>> dt = pd.date_range[start='2019-10-27 00:00:00.0', periods=24,
... freq='H']
>>> dt
DatetimeIndex[['2019-10-27 00:00:00', '2019-10-27 01:00:00',
'2019-10-27 02:00:00', '2019-10-27 03:00:00',
'2019-10-27 04:00:00', '2019-10-27 05:00:00',
'2019-10-27 06:00:00', '2019-10-27 07:00:00',
'2019-10-27 08:00:00', '2019-10-27 09:00:00',
'2019-10-27 10:00:00', '2019-10-27 11:00:00',
'2019-10-27 12:00:00', '2019-10-27 13:00:00',
'2019-10-27 14:00:00', '2019-10-27 15:00:00',
'2019-10-27 16:00:00', '2019-10-27 17:00:00',
'2019-10-27 18:00:00', '2019-10-27 19:00:00',
'2019-10-27 20:00:00', '2019-10-27 21:00:00',
'2019-10-27 22:00:00', '2019-10-27 23:00:00'],
dtype='datetime64[ns]', freq='H']
date_range[]
chấp nhận các đối số mà bạn sử dụng để chỉ định bắt đầu hoặc kết thúc phạm vi, số khoảng thời gian, tần suất, múi giờ và hơn thế
nữa.
Bây giờ bạn đã có các giá trị nhiệt độ và ngày giờ tương ứng, bạn có thể tạo DataFrame. Trong nhiều trường hợp, thật tiện lợi khi sử dụng các giá trị ngày-giờ làm nhãn hàng:
>>>
>>> temp = pd.DataFrame[data={'temp_c': temp_c}, index=dt]
>>> temp
temp_c
2019-10-27 00:00:00 8.0
2019-10-27 01:00:00 7.1
2019-10-27 02:00:00 6.8
2019-10-27 03:00:00 6.4
2019-10-27 04:00:00 6.0
2019-10-27 05:00:00 5.4
2019-10-27 06:00:00 4.8
2019-10-27 07:00:00 5.0
2019-10-27 08:00:00 9.1
2019-10-27 09:00:00 12.8
2019-10-27 10:00:00 15.3
2019-10-27 11:00:00 19.1
2019-10-27 12:00:00 21.2
2019-10-27 13:00:00 22.1
2019-10-27 14:00:00 22.4
2019-10-27 15:00:00 23.1
2019-10-27 16:00:00 21.0
2019-10-27 17:00:00 17.9
2019-10-27 18:00:00 15.5
2019-10-27 19:00:00 14.4
2019-10-27 20:00:00 11.9
2019-10-27 21:00:00 11.0
2019-10-27 22:00:00 10.2
2019-10-27 23:00:00 9.1
Đó là nó! Bạn đã tạo DataFrame với dữ liệu chuỗi thời gian và chỉ số hàng ngày-giờ.
Lập chỉ mục và cắt lát
Khi bạn đã có Pandas DataFrame với dữ liệu chuỗi thời gian, bạn có thể áp dụng phương pháp cắt để chỉ lấy một phần thông tin một cách thuận tiện:
>>>
>>> temp['2019-10-27 05':'2019-10-27 14']
temp_c
2019-10-27 05:00:00 5.4
2019-10-27 06:00:00 4.8
2019-10-27 07:00:00 5.0
2019-10-27 08:00:00 9.1
2019-10-27 09:00:00 12.8
2019-10-27 10:00:00 15.3
2019-10-27 11:00:00 19.1
2019-10-27 12:00:00 21.2
2019-10-27 13:00:00 22.1
2019-10-27 14:00:00 22.4
Ví dụ này cho thấy cách trích xuất nhiệt độ từ 05:00 đến 14:00 [5 giờ sáng và 2 giờ chiều]. Mặc dù bạn đã cung cấp các chuỗi, nhưng Pandas biết rằng các nhãn hàng của bạn là các giá trị ngày-giờ và diễn giải các chuỗi dưới dạng ngày và giờ.
Lấy mẫu lại và cán
Bạn vừa thấy cách kết hợp các nhãn hàng ngày-giờ và sử dụng phương pháp cắt để lấy thông tin bạn cần từ dữ liệu chuỗi thời gian. Điều này chỉ là khởi đầu. Nó trở nên tốt hơn!
Nếu bạn muốn chia một ngày thành bốn khoảng thời gian sáu giờ và nhận được nhiệt độ trung bình cho mỗi khoảng thời gian, thì bạn chỉ cần thực hiện một tuyên bố. Pandas cung cấp phương pháp .resample[]
mà bạn có thể kết hợp với các phương pháp khác như .mean[]
:
>>>
>>> temp.resample[rule='6h'].mean[]
temp_c
2019-10-27 00:00:00 6.616667
2019-10-27 06:00:00 11.016667
2019-10-27 12:00:00 21.283333
2019-10-27 18:00:00 12.016667
Bây giờ bạn có một Pandas DataFrame mới với bốn hàng. Mỗi hàng tương ứng với một khoảng thời gian sáu
giờ. Ví dụ: giá trị 6.616667
là giá trị trung bình của sáu nhiệt độ đầu tiên từ DataFrame temp
, trong khi giá trị là giá trị trung bình của sáu nhiệt độ 12.016667
cuối cùng.
Thay vào đó .mean[]
, bạn có thể áp dụng .min[]
hoặc .max[]
để lấy nhiệt độ tối thiểu và tối đa cho mỗi khoảng thời gian. Bạn cũng có thể sử dụng .sum[]
để lấy tổng giá trị dữ liệu, mặc dù thông tin này có thể không hữu ích khi bạn đang làm
việc với nhiệt độ.
Bạn cũng có thể cần thực hiện một số phân tích cửa sổ luân phiên . Điều này liên quan đến việc tính toán thống kê cho một số hàng liền kề được chỉ định, tạo nên cửa sổ dữ liệu của bạn. Bạn có thể "cuộn" cửa sổ bằng cách chọn một tập hợp các hàng liền kề khác nhau để thực hiện các phép tính của mình.
Cửa sổ đầu tiên của bạn bắt đầu với hàng đầu tiên trong DataFrame của bạn và bao gồm nhiều hàng liền kề như bạn chỉ định. Sau đó, bạn di chuyển cửa sổ của mình xuống một hàng, bỏ hàng đầu tiên và thêm hàng đến ngay sau hàng cuối cùng và tính toán lại cùng một thống kê. Bạn lặp lại quá trình này cho đến khi bạn đến hàng cuối cùng của DataFrame.
Pandas cung cấp phương pháp .rolling[]
cho mục đích này:
>>>
>>> temp.rolling[window=3].mean[]
temp_c
2019-10-27 00:00:00 NaN
2019-10-27 01:00:00 NaN
2019-10-27 02:00:00 7.300000
2019-10-27 03:00:00 6.766667
2019-10-27 04:00:00 6.400000
2019-10-27 05:00:00 5.933333
2019-10-27 06:00:00 5.400000
2019-10-27 07:00:00 5.066667
2019-10-27 08:00:00 6.300000
2019-10-27 09:00:00 8.966667
2019-10-27 10:00:00 12.400000
2019-10-27 11:00:00 15.733333
2019-10-27 12:00:00 18.533333
2019-10-27 13:00:00 20.800000
2019-10-27 14:00:00 21.900000
2019-10-27 15:00:00 22.533333
2019-10-27 16:00:00 22.166667
2019-10-27 17:00:00 20.666667
2019-10-27 18:00:00 18.133333
2019-10-27 19:00:00 15.933333
2019-10-27 20:00:00 13.933333
2019-10-27 21:00:00 12.433333
2019-10-27 22:00:00 11.033333
2019-10-27 23:00:00 10.100000
Bây giờ bạn có DataFrame với nhiệt độ trung bình được tính toán cho một số cửa sổ ba giờ. Tham số window
chỉ định kích thước của cửa sổ thời gian di chuyển.
Trong ví
dụ trên, giá trị thứ ba [ 7.3
] là nhiệt độ trung bình trong ba giờ đầu tiên [ 00:00:00
, 01:00:00
và 02:00:00
]. Giá trị thứ tư là nhiệt độ trung bình cho giờ 02:00:00
, 03:00:00
và 04:00:00
. Giá trị cuối cùng là nhiệt độ trung bình trong ba giờ qua, 21:00:00
, 22:00:00
, và 23:00:00
. Hai giá trị đầu tiên bị thiếu vì không có đủ dữ liệu để tính toán chúng.
Lập kế hoạch với dữ liệu gấu trúc
Pandas cho phép bạn trực quan hóa dữ liệu hoặc tạo các lô dựa trên DataFrames . Nó sử dụng Matplotlib ở chế độ nền, vì vậy việc khai thác khả năng âm mưu của Pandas rất giống với làm việc với Matplotlib .
Nếu bạn muốn hiển thị các ô, thì trước tiên bạn cần nhập matplotlib.pyplot
:
>>>
>>> import matplotlib.pyplot as plt
Bây giờ bạn có thể sử dụng pandas.DataFrame.plot[]
để tạo cốt truyện và plt.show[]
hiển thị nó:
>>>
>>> temp.plot[]
>>> plt.show[]
Bây giờ .plot[]
trả về một plot
đối tượng trông giống như sau:
Bạn cũng có thể áp dụng .plot.line[]
và nhận được kết quả tương tự. Cả hai .plot[]
và .plot.line[]
có nhiều tham số tùy chọn mà bạn có thể sử dụng để chỉ định giao diện của âm mưu của bạn. Một số trong số chúng được chuyển trực
tiếp đến các phương thức Matplotlib cơ bản.
Bạn có thể lưu hình của mình bằng cách xâu chuỗi các phương pháp .get_figure[]
và .savefig[]
:
>>>
>>> temp.plot[].get_figure[].savefig['temperatures.png']
Câu lệnh này tạo cốt truyện và lưu nó dưới dạng tệp được gọi 'temperatures.png'
trong thư mục làm việc của bạn.
Bạn có thể lấy các loại ô khác bằng Pandas DataFrame. Ví dụ: bạn có thể hình dung dữ liệu ứng viên công việc của mình từ trước đó dưới dạng biểu đồ với .plot.hist[]
:
>>>
>>> df.loc[:, ['py-score', 'total']].plot.hist[bins=5, alpha=0.4]
>>> plt.show[]
Trong ví dụ này, bạn trích xuất dữ liệu điểm và tổng điểm của bài kiểm tra Python và trực quan hóa nó bằng biểu đồ. Cốt truyện kết quả trông như thế này:
Đây chỉ là cái nhìn cơ bản. Bạn có thể điều chỉnh chi tiết với các thông số tùy chọn bao gồm .plot.hist[]
, Matplotlib'splt.rcParams
,
và nhiều thông số khác. Bạn có thể tìm thấy những lời giải thích chi tiết trong Anatomy of Matplotlib .
Đọc thêm
Pandas DataFrames là các đối tượng rất toàn diện hỗ trợ nhiều thao tác không được đề cập trong hướng dẫn này. Một số trong số này bao gồm:
- Lập chỉ mục phân cấp [nhiều cấp]
- Phân nhóm
- Hợp nhất, nối và nối
- Làm việc với dữ liệu phân loại
Các quan chức Pandas hướng dẫn tóm tắt một số các tùy chọn có sẵn độc đáo. Nếu bạn muốn tìm hiểu thêm về Pandas và DataFrames , thì bạn có thể xem các hướng dẫn sau:
- Làm sạch dữ liệu Pythonic với gấu trúc và NumPy
- Pandas DataFrames 101
- Giới thiệu về Gấu trúc và Vincent
- Gấu trúc Python: Thủ thuật & Tính năng có thể bạn chưa biết
- Gấu trúc thành ngữ: Thủ thuật & tính năng có thể bạn chưa biết
- Đọc CSV với gấu trúc
- Viết CSV với gấu trúc
- Đọc và ghi tệp CSV bằng Python
- Đọc và ghi tệp CSV
- Sử dụng gấu trúc để đọc tệp Excel lớn bằng Python
- Nhanh chóng, linh hoạt, dễ dàng và trực quan: Cách tăng tốc dự án gấu trúc của bạn
Bạn đã biết rằng Pandas DataFrames xử lý dữ liệu hai chiều. Nếu bạn cần làm việc với dữ liệu được gắn nhãn trong nhiều hơn hai chiều, bạn có thể xem xarray , một thư viện Python mạnh mẽ khác dành cho khoa học dữ liệu với các tính năng rất giống với Pandas.
Nếu bạn làm việc với dữ liệu lớn và muốn có trải nghiệm giống như DataFrame, thì bạn có thể cho Dask một cơ hội và sử dụng API DataFrame của nó . Một Dask DataFrame chứa nhiều Pandas DataFrame và thực hiện tính toán một cách lười biếng .
Phần kết luận
Bây giờ bạn đã biết Pandas DataFrame là gì, một số tính năng của nó và cách bạn có thể sử dụng nó để làm việc với dữ liệu một cách hiệu quả. Pandas DataFrames là cấu trúc dữ liệu mạnh mẽ, thân thiện với người dùng mà bạn có thể sử dụng để hiểu sâu hơn về tập dữ liệu của mình!
Trong hướng dẫn này, bạn đã học được:
- Pandas DataFrame là gì và cách tạo một Pandas DataFrame
- Cách truy cập, sửa đổi, thêm, sắp xếp, lọc và xóa dữ liệu
- Cách sử dụng quy trình NumPy với DataFrames
- Cách xử lý các giá trị bị thiếu
- Cách làm việc với dữ liệu chuỗi thời gian
- Cách trực quan hóa dữ liệu có trong DataFrames
Bạn đã học đủ để bao quát các nguyên tắc cơ bản của DataFrames. Nếu bạn muốn tìm hiểu sâu hơn về cách làm việc với dữ liệu bằng Python , hãy xem toàn bộ các hướng dẫn về Gấu trúc .
Nếu bạn có thắc mắc hoặc ý kiến đóng góp, thì hãy để chúng ở phần bình luận bên dưới.
Copied !!!