Thứ sáu, 10/02/2017 | 00:00 GMT+7

Cách cài đặt gói pandas và làm việc với cấu trúc dữ liệu trong Python 3

Gói pandas Python được sử dụng để thao tác và phân tích dữ liệu, được thiết kế để cho phép bạn làm việc với dữ liệu có nhãn hoặc dữ liệu quan hệ theo cách trực quan hơn.

Được xây dựng trên gói numpy , pandas bao gồm các nhãn, chỉ số mô tả và đặc biệt mạnh mẽ trong việc xử lý các định dạng dữ liệu phổ biến và dữ liệu bị thiếu.

Gói pandas cung cấp chức năng bảng tính nhưng làm việc với dữ liệu với Python nhanh hơn nhiều so với với bảng tính và pandas tỏ ra rất hiệu quả.

Trong hướng dẫn này, trước tiên ta sẽ cài đặt pandas và sau đó giúp bạn định hướng với các cấu trúc dữ liệu cơ bản: ChuỗiDữ liệu .

Cài đặt pandas

Giống như với các gói Python khác, ta có thể cài đặt pandas bằng pip .

Đầu tiên, hãy chuyển sang môi trường lập trình local của ta hoặc môi trường lập trình dựa trên server mà ta lựa chọn và cài đặt pandas cùng với các phụ thuộc của nó ở đó:

  • pip install pandas numpy python-dateutil pytz

Bạn sẽ nhận được kết quả tương tự như sau:

Output
Successfully installed pandas-0.19.2

Nếu bạn muốn cài đặt pandas trong Anaconda , bạn có thể làm như vậy bằng lệnh sau:

  • conda install pandas

Đến đây, bạn đã cài đặt xong để bắt đầu làm việc với gói pandas .

Loạt

pandas , Chuỗi là mảng một chiều có thể chứa bất kỳ kiểu dữ liệu nào. Các nhãn trục được gọi chung là chỉ số .

Hãy bắt đầu trình thông dịch Python trong dòng lệnh của bạn như sau:

  • python

Từ bên trong trình thông dịch, nhập cả gói numpypandas vào không gian tên của bạn:

  • import numpy as np
  • import pandas as pd

Trước khi ta làm việc với Series, ta hãy xem nó trông như thế nào:

s = pd.Series([data], index=[index]) 

Bạn có thể nhận thấy rằng dữ liệu có cấu trúc giống như một danh sách Python.

Không cần khai báo index

Ta sẽ nhập dữ liệu số nguyên và sau đó cung cấp tham số tên cho Sê-ri, nhưng ta sẽ tránh sử dụng tham số index để xem cách pandas điền nó một cách ngầm định:

  • s = pd.Series([0, 1, 4, 9, 16, 25], name='Squares')

Bây giờ, ta hãy gọi Series để ta có thể xem những gì pandas làm với nó:

  • s

Ta sẽ thấy kết quả sau, với index ở cột bên trái, giá trị dữ liệu của ta ở cột bên phải. Bên dưới các cột là thông tin về Tên của Dòng và kiểu dữ liệu tạo nên các giá trị.

Output
0 0 1 1 2 4 3 9 4 16 5 25 Name: Squares, dtype: int64

Mặc dù ta không cung cấp index cho mảng, nhưng đã có một index được thêm ngầm về các giá trị nguyên từ 0 đến 5 .

Khai báo index

Như cú pháp ở trên cho ta thấy, ta cũng có thể tạo Series với một index rõ ràng. Ta sẽ sử dụng dữ liệu về độ sâu trung bình tính bằng mét của các đại dương trên Trái đất:

  • avg_ocean_depth = pd.Series([1205, 3646, 3741, 4080, 3270], index=['Arctic', 'Atlantic', 'Indian', 'Pacific', 'Southern'])

Với Series được xây dựng, hãy gọi nó để xem kết quả :

  • avg_ocean_depth
Output
Arctic 1205 Atlantic 3646 Indian 3741 Pacific 4080 Southern 3270 dtype: int64

Ta có thể thấy rằng index mà ta cung cấp nằm ở bên trái với các giá trị ở bên phải.

Lập index và Slicing Series

Với Dòng pandas ta có thể lập index theo số tương ứng để truy xuất các giá trị:

  • avg_ocean_depth[2]
Output
3741

Ta cũng có thể phân chia theo số index để truy xuất các giá trị:

  • avg_ocean_depth[2:4]
Output
Indian 3741 Pacific 4080 dtype: int64

Ngoài ra, ta có thể gọi giá trị của index để trả về giá trị mà nó tương ứng với:

  • avg_ocean_depth['Indian']
Output
3741

Ta cũng có thể cắt các giá trị của index để trả về các giá trị tương ứng:

  • avg_ocean_depth['Indian':'Southern']
Output
Indian 3741 Pacific 4080 Southern 3270 dtype: int64

Lưu ý trong ví dụ cuối cùng này khi cắt với tên index , hai tham số là bao gồm chứ không phải loại trừ.

Hãy thoát khỏi trình thông dịch Python với quit() .

Chuỗi khởi tạo bằng từ điển

Với pandas ta cũng có thể sử dụng kiểu dữ liệu từ điển để khởi tạo Chuỗi. Bằng cách này, ta sẽ không khai báo một index dưới dạng một danh sách riêng biệt mà thay vào đó sử dụng các khóa tích hợp làm index .

Hãy tạo một file có tên là ocean.py và thêm từ điển sau với lệnh gọi để in nó.

Ocean.py
import numpy as np import pandas as pd  avg_ocean_depth = pd.Series({                     'Arctic': 1205,                     'Atlantic': 3646,                     'Indian': 3741,                     'Pacific': 4080,                     'Southern': 3270 })  print(avg_ocean_depth)  

Bây giờ ta có thể chạy file trên dòng lệnh:

  • python ocean.py

Ta sẽ nhận được kết quả sau:

Output
Arctic 1205 Atlantic 3646 Indian 3741 Pacific 4080 Southern 3270 dtype: int64

Chuỗi được hiển thị một cách có tổ chức, với index (được tạo thành từ các khóa của ta ) ở bên trái và tập hợp các giá trị ở bên phải.

Điều này sẽ hoạt động giống như các từ điển Python khác ở chỗ bạn có thể truy cập các giá trị bằng cách gọi khóa, ta có thể làm như vậy:

Ocean_depth.py
... print(avg_ocean_depth['Indian']) print(avg_ocean_depth['Atlantic':'Indian']) 
Output
3741 Atlantic 3646 Indian 3741 dtype: int64

Tuy nhiên, các Series này hiện là các đối tượng Python nên bạn sẽ không thể sử dụng các hàm từ điển.

Từ điển Python cung cấp một biểu mẫu khác để cài đặt Chuỗi trong pandas .

DataFrames

DataFrames là cấu trúc dữ liệu được gắn nhãn 2 chiều có các cột có thể được tạo thành từ các kiểu dữ liệu khác nhau.

DataFrames tương tự như bảng tính hoặc bảng SQL. Nói chung, khi bạn làm việc với pandas , DataFrames sẽ là đối tượng phổ biến nhất mà bạn sẽ sử dụng.

Để hiểu cách hoạt động của DataFrame pandas , hãy cài đặt hai Chuỗi và sau đó chuyển chúng vào DataFrame. Sê-ri đầu tiên sẽ là Sê-ri avg_ocean_depth của ta từ trước đó và avg_ocean_depth -ri thứ hai của ta sẽ là max_ocean_depth chứa dữ liệu về độ sâu tối đa của mỗi đại dương trên Trái đất tính bằng mét.

Ocean.py
import numpy as np import pandas as pd   avg_ocean_depth = pd.Series({                     'Arctic': 1205,                     'Atlantic': 3646,                     'Indian': 3741,                     'Pacific': 4080,                     'Southern': 3270 })  max_ocean_depth = pd.Series({                     'Arctic': 5567,                     'Atlantic': 8486,                     'Indian': 7906,                     'Pacific': 10803,                     'Southern': 7075 }) 

Với hai Chuỗi đó được cài đặt , hãy thêm DataFrame vào cuối file , bên dưới max_ocean_depth . Trong ví dụ của ta , cả hai Chuỗi này đều có nhãn index giống nhau, nhưng nếu bạn có Chuỗi có các nhãn khác nhau thì các giá trị bị thiếu sẽ được gắn nhãn NaN .

Điều này được xây dựng theo cách mà ta có thể bao gồm các nhãn cột, mà ta khai báo là khóa cho các biến của Chuỗi. Để xem DataFrame trông như thế nào, hãy thực hiện lệnh gọi để in nó.

Ocean.py
... max_ocean_depth = pd.Series({                     'Arctic': 5567,                     'Atlantic': 8486,                     'Indian': 7906,                     'Pacific': 10803,                     'Southern': 7075 })  ocean_depths = pd.DataFrame({                     'Avg. Depth (m)': avg_ocean_depth,                     'Max. Depth (m)': max_ocean_depth })  print(ocean_depths)  
Output
Avg. Depth (m) Max. Depth (m) Arctic 1205 5567 Atlantic 3646 8486 Indian 3741 7906 Pacific 4080 10803 Southern 3270 7075

Kết quả hiển thị hai tiêu đề cột của ta cùng với dữ liệu số dưới mỗi tiêu đề và nhãn từ các phím từ điển nằm ở bên trái.

Sắp xếp dữ liệu trong DataFrames

Ta có thể sắp xếp dữ liệu trong DataFrame bằng cách sử dụng hàm DataFrame.sort_values(by=...) .

Ví dụ: hãy sử dụng tham số Boolean ascending , có thể là True hoặc False . Lưu ý ascending là một tham số ta có thể truyền cho hàm, nhưng giảm dần thì không.

Ocean_depth.py
... print(ocean_depths.sort_values('Avg. Depth (m)', ascending=True)) 
Output
Avg. Depth (m) Max. Depth (m) Arctic 1205 5567 Southern 3270 7075 Atlantic 3646 8486 Indian 3741 7906 Pacific 4080 10803

Bây giờ, kết quả hiển thị các số tăng dần từ giá trị thấp đến giá trị cao trong cột số nguyên ngoài cùng bên trái.

Phân tích thống kê với DataFrames

Tiếp theo, hãy xem một số thống kê tóm tắt mà ta có thể thu thập từ pandas bằng hàm DataFrame.describe() .

Không chuyển các tham số cụ thể, hàm DataFrame.describe() sẽ cung cấp thông tin sau cho các kiểu dữ liệu số:

Trở về Nó nghĩa là gì
count Tần số đếm; số lần một cái gì đó xảy ra
mean Trung bình hoặc trung bình
std Độ lệch chuẩn, một giá trị số được sử dụng để biểu thị mức độ khác nhau của dữ liệu
min Số nhỏ nhất hoặc nhỏ nhất trong tập hợp
25% Phân vị thứ 25
50% Phân vị thứ 50
75% Phân vị thứ 75
max Số lớn nhất hoặc lớn nhất trong tập hợp

Hãy để Python in ra dữ liệu thống kê này cho ta bằng cách gọi ocean_depths của ta với hàm description describe() :

Ocean.py
... print(ocean_depths.describe()) 

Khi ta chạy chương trình này, ta sẽ nhận được kết quả sau:

Output
Avg. Depth (m) Max. Depth (m) count 5.000000 5.000000 mean 3188.400000 7967.400000 std 1145.671113 1928.188347 min 1205.000000 5567.000000 25% 3270.000000 7075.000000 50% 3646.000000 7906.000000 75% 3741.000000 8486.000000 max 4080.000000 10803.000000

Như vậy, bạn có thể so sánh kết quả kết quả tại đây với DataFrame ban đầu và hiểu rõ hơn về độ sâu trung bình và độ sâu tối đa của các đại dương trên Trái đất khi được coi là một group .

Xử lý các giá trị bị thiếu

Thường thì khi làm việc với dữ liệu, bạn sẽ bị thiếu các giá trị. Gói pandas cung cấp nhiều cách khác nhau để làm việc với dữ liệu bị thiếu , trong đó đề cập đến dữ liệu null hoặc dữ liệu không hiển thị vì lý do nào đó. Ở pandas , đây được gọi là dữ liệu NA và được hiển thị dưới dạng NaN .

Ta sẽ xem xét việc loại bỏ các giá trị bị thiếu với hàm DataFrame.dropna()điền các giá trị bị thiếu bằng hàm DataFrame.fillna() . Điều này sẽ đảm bảo bạn không gặp phải sự cố khi bắt đầu.

Hãy tạo một file mới có tên user_data.py và điền vào nó một số dữ liệu bị thiếu giá trị và biến nó thành DataFrame:

user_data.py
import numpy as np import pandas as pd   user_data = {'first_name': ['Sammy', 'Jesse', np.nan, 'Jamie'],         'last_name': ['Shark', 'Octopus', np.nan, 'Mantis shrimp'],         'online': [True, np.nan, False, True],         'followers': [987, 432, 321, np.nan]}  df = pd.DataFrame(user_data, columns = ['first_name', 'last_name', 'online', 'followers'])  print(df)  

Lệnh in của ta cho ta thấy kết quả sau khi ta chạy chương trình:

Output
first_name last_name online followers 0 Sammy Shark True 987.0 1 Jesse Octopus NaN 432.0 2 NaN NaN False 321.0 3 Jamie Mantis shrimp True NaN

Có khá nhiều giá trị bị thiếu ở đây.

Trước tiên, hãy loại bỏ các giá trị bị thiếu với dropna() .

user_data.py
... df_drop_missing = df.dropna()  print(df_drop_missing) 

Vì chỉ có một hàng không có giá trị nào bị thiếu trong tập dữ liệu nhỏ của ta , đó là hàng duy nhất vẫn còn nguyên vẹn khi ta chạy chương trình:

Output
first_name last_name online followers 0 Sammy Shark True 987.0

Để thay thế cho việc loại bỏ các giá trị, thay vào đó, ta có thể điền các giá trị bị thiếu bằng một giá trị do ta chọn, chẳng hạn như 0 . Điều này ta sẽ đạt được với DataFrame.fillna(0) .

Xóa hoặc comment hai dòng cuối cùng mà ta đã thêm vào file của bạn và thêm các dòng sau:

user_data.py
... df_fill = df.fillna(0)  print(df_fill) 

Khi ta chạy chương trình, ta sẽ nhận được kết quả sau:

Output
first_name last_name online followers 0 Sammy Shark True 987.0 1 Jesse Octopus 0 432.0 2 0 0 False 321.0 3 Jamie Mantis shrimp True 0.0

Bây giờ tất cả các cột và hàng của ta đều nguyên vẹn và thay vì có NaN như các giá trị của ta , giờ đây ta có 0 các khoảng trống đó. Bạn sẽ nhận thấy rằng phao được sử dụng khi thích hợp.

Đến đây, bạn có thể sắp xếp dữ liệu, phân tích thống kê và xử lý các giá trị bị thiếu trong DataFrames.

Kết luận

Hướng dẫn này bao gồm thông tin giới thiệu về phân tích dữ liệu với pandas và Python 3. Đến đây bạn đã cài đặt pandas và có thể làm việc với cấu trúc dữ liệu Series và DataFrames trong pandas .


Tags:

Các tin liên quan

Cách cài đặt gói pandas và làm việc với cấu trúc dữ liệu trong Python 3
2017-02-10
Cách cài đặt gói pandas và làm việc với cấu trúc dữ liệu trong Python 3
2017-02-10
Cách viết module trong Python 3
2017-02-03
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên server Ubuntu 16.04
2017-02-01
Cách khai báo module trong Python 3
2017-02-01
Hiểu Tuples trong Python 3
2017-01-19
Cách tạo các vòng lặp trong Python 3
2017-01-12
Hiểu toàn bộ danh sách trong Python 3
2017-01-12
Cách sử dụng các câu lệnh Break, Continue và Pass khi làm việc với các vòng lặp trong Python 3
2017-01-06
Cách tạo vòng lặp While trong Python 3
2017-01-05