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óipandas 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ỗi và Dữ 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:
OutputSuccessfully 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 numpy và pandas 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ị.
Output0     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 
OutputArctic      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] 
Output3741 Ta cũng có thể phân chia theo số index để truy xuất các giá trị:
- avg_ocean_depth[2:4] 
OutputIndian     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'] 
Output3741 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'] 
OutputIndian      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ó.
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:
OutputArctic      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:
... print(avg_ocean_depth['Indian']) print(avg_ocean_depth['Atlantic':'Indian']) Output3741 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.
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ó.
... 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.
... 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() :
... 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() và đ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:
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() .
... 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:
... 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 .
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 32017-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
 

