Thao tác dữ liệu trong Python Pandas

Trong chương trước, chúng ta đã đi sâu vào chi tiết về NumPy và đối tượng ndarray của nó, cung cấp khả năng lưu trữ và thao tác hiệu quả đối với các mảng được nhập dày đặc trong Python. Ở đây chúng ta sẽ xây dựng kiến ​​thức này bằng cách xem chi tiết các cấu trúc dữ liệu được cung cấp bởi thư viện Pandas. Pandas là một gói mới hơn được xây dựng dựa trên NumPy và cung cấp triển khai hiệu quả của một DataFrame. DataFrame về cơ bản là các mảng đa chiều có gắn nhãn hàng và cột và thường có các loại không đồng nhất và/hoặc dữ liệu bị thiếu. Cùng với việc cung cấp giao diện lưu trữ thuận tiện cho dữ liệu được gắn nhãn, Pandas triển khai một số thao tác dữ liệu mạnh mẽ quen thuộc với người dùng của cả khung cơ sở dữ liệu và chương trình bảng tính

Như chúng ta đã thấy, cấu trúc dữ liệu ndarray của NumPy cung cấp các tính năng cần thiết cho loại dữ liệu sạch, được tổ chức tốt thường thấy trong các tác vụ tính toán số. Mặc dù nó phục vụ mục đích này rất tốt, nhưng những hạn chế của nó trở nên rõ ràng khi chúng ta cần linh hoạt hơn (e. g. , gắn nhãn vào dữ liệu, làm việc với dữ liệu bị thiếu, v.v. ) và khi cố gắng thực hiện các thao tác không ánh xạ tốt đến phát sóng theo từng phần tử (e. g. , nhóm, trục, v.v. ), mỗi trong số đó là một phần quan trọng để phân tích dữ liệu ít cấu trúc hơn có sẵn ở nhiều dạng trên thế giới xung quanh chúng ta. Pandas, và đặc biệt là các đối tượng SeriesDataFrame của nó, được xây dựng trên cấu trúc mảng NumPy và cung cấp quyền truy cập hiệu quả vào các loại nhiệm vụ "trộn dữ liệu" chiếm nhiều thời gian của nhà khoa học dữ liệu

Trong chương này, chúng ta sẽ tập trung vào cơ chế sử dụng Series, DataFrame và các cấu trúc liên quan một cách hiệu quả. Chúng tôi sẽ sử dụng các ví dụ được rút ra từ các bộ dữ liệu thực khi thích hợp, nhưng những ví dụ này không nhất thiết phải là trọng tâm

Cài đặt và sử dụng Pandas

Việc cài đặt Pandas trên hệ thống của bạn yêu cầu phải cài đặt NumPy và nếu xây dựng thư viện từ nguồn, yêu cầu các công cụ thích hợp để biên dịch các nguồn C và Cython mà Pandas được xây dựng trên đó. Chi tiết về cài đặt này có thể được tìm thấy trong tài liệu Pandas. Nếu bạn đã làm theo lời khuyên được nêu trong Lời nói đầu và sử dụng ngăn xếp Anaconda, thì bạn đã cài đặt Pandas

Khi Pandas được cài đặt, bạn có thể nhập nó và kiểm tra phiên bản

Trong 1]

import pandas
pandas.__version__

Ra[1]

'0.18.1'

Giống như chúng tôi thường nhập NumPy dưới bí danh

'0.18.1'
3, chúng tôi sẽ nhập Pandas dưới bí danh
'0.18.1'
4

Trong 2]

import pandas as pd

Quy ước nhập khẩu này sẽ được sử dụng trong suốt phần còn lại của cuốn sách này

Nhắc nhở về Tài liệu tích hợp

Khi bạn đọc qua chương này, đừng quên rằng IPython cung cấp cho bạn khả năng khám phá nhanh nội dung của một gói (bằng cách sử dụng tính năng hoàn thành tab) cũng như tài liệu về các chức năng khác nhau (sử dụng ký tự

'0.18.1'
5). (Tham khảo lại Trợ giúp và Tài liệu trong IPython nếu bạn cần xem lại phần này. )

Ví dụ: để hiển thị tất cả nội dung của không gian tên gấu trúc, bạn có thể nhập

In [3]: pd.<TAB>

Và để hiển thị tài liệu tích hợp của Pandas, bạn có thể sử dụng tài liệu này

In [4]: pd?

Tài liệu chi tiết hơn, cùng với hướng dẫn và các tài nguyên khác, có thể được tìm thấy tại http. //gấu trúc. pydata. tổ chức/

Pandas được Wes McKinney phát triển tại quỹ phòng hộ AQR để cho phép phân tích nhanh dữ liệu tài chính. Pandas là một phần mở rộng của NumPy hỗ trợ các hoạt động được vector hóa cho phép thao tác nhanh thông tin tài chính

Tôi sẽ sử dụng dữ liệu của công ty do hộp cát dành cho nhà phát triển Intrinio cung cấp. Nếu muốn làm theo, bạn có thể tìm thấy mã và dữ liệu trên Phân tích Alpha Github Repo

________số 8_______

        name	                 sector
id
1	Apple Inc                Consumer Goods
2	American                Express Co Financial
3	Boeing Co              Industrial Goods
4	Caterpillar Inc	       Industrial Goods
5	Cisco Systems Inc Technology

Làm cho dữ liệu của bạn gọn gàng

Mặc dù không cần thiết cho những ví dụ đơn giản này, nhưng tôi muốn giới thiệu Dữ liệu ngăn nắp. Khi làm việc với các tập dữ liệu lớn và đặc biệt là để phân tích nhân tố, bạn sẽ muốn làm cho cuộc sống của mình dễ dàng hơn và sắp xếp gọn gàng tập dữ liệu của mình bằng cách sử dụng pandas. tan chảy. Nó làm cho dữ liệu dễ phân tích hơn và thường hiệu quả hơn. Đối với những người quan tâm, có một bài viết tuyệt vời trên phương tiện về Bộ dữ liệu dọn dẹp trong Python

Hoạt động chuỗi trong Pandas

Thông thường, chúng ta sẽ cần thao tác với dữ liệu chuỗi được định dạng không chính xác. Pandas cung cấp [hoạt động chuỗi được vector hóa/trăn-cho-tài chính#vectorization). Đối với hầu hết các hoạt động chuỗi, bạn sẽ cần phải làm quen với

Phương thứcMô tảgấu trúc. Loạt. str. chuỗi splitSplits trên các dấu phân cách được chỉ định. Loạt. str. replaceThay thế chuỗi khi khớp chuỗi hoặc regexpandas. Loạt. str. extractExtracts chuỗi trên khớp nhóm regex

Hãy thực hiện thao tác trích xuất ví dụ bằng cách kết hợp một số dữ liệu hiện có của chúng ta lại với nhau

companies_smushed = pd.DataFrame()
companies_smushed['sector_employees'] = companies['sector'] + \
                                        companies['employees'].astype(str)
print(companies[['sector', 'employees']].head())
print(companies_smushed.head())
companies_smushed = companies_smushed['sector_employees'].str.extract(r'(\D+)(\d+)')
companies_smushed.head()

    sector                          employees
0   Consumer Goods      132000
1   Financial                    59000
2   Industrial Goods        153027
3   Industrial Goods        104000
4   Technology                74200

    sector_employees
0   Consumer Goods      132000
1   Financial                    59000
2   Industrial Goods        153027
3   Industrial Goods        104000
4   Technology                74200

0   1
0   Consumer Goods    132000
1   Financial                  59000
2   Industrial Goods      153027
3   Industrial Goods      104000
4   Technology              74200

Hoạt động nhóm. Tách-Áp dụng-Kết hợp

Hoạt động nhóm có thể được chia thành ba bước

  1. Chia dữ liệu thành các nhóm
  2. Áp dụng một chức năng cho mỗi nhóm
  3. Kết hợp các nhóm thành một kết quả

Trước khi chúng tôi sử dụng gấu trúc để nhóm và sửa đổi dữ liệu của mình, hãy xem cách chúng tôi có thể hoàn thành việc đếm số lượng công ty trong từng lĩnh vực bằng cách sử dụng python

sector_count = {}
for sector in companies['sector']:
  if sector_count.get(sector):
    sector_count.update({sector: sector_count[sector] + 1})
  else:
    sector_count.update({sector: 1})
print(sector_count)

{'Consumer Goods': 4,
'Financial': 5,
'Industrial Goods': 5,
'Technology': 5,
'Basic Materials': 2,
'Services': 3,
'Healthcare': 4}

nhóm

gấu trúc. Khung dữ liệu. groupby cung cấp cho chúng tôi cách tốt hơn để nhóm dữ liệu. groupby trả về đối tượng DataFrameGroupBy hoặc đối tượng SeriesGroupBy . Những đối tượng này có thể được coi là một nhóm. Bạn có thể thấy bên dưới sector_group. các nhóm trả về một từ điển gồm các cặp khóa/giá trị là các cung và các hàng được liên kết của chúng. Xem bên dưới nhóm tài chính chứa các hàng ([1, 6, 8, 14, 23]) tương ứng

sector_group = companies.groupby(by='sector')
print(sector_group)
print(sector_group.groups)
print(sector_group.get_group('Financial'))



{'Basic Materials': Int64Index([5, 27], dtype='int64'),
'Consumer Goods': Int64Index([0, 15, 20, 22], dtype='int64'),
'Financial': Int64Index([1, 6, 8, 14, 23], dtype='int64'),
'Healthcare': Int64Index([13, 18, 21, 24], dtype='int64'),
'Industrial Goods': Int64Index([2, 3, 7, 12, 17], dtype='int64'),
'Services': Int64Index([9, 16, 26], dtype='int64'),
'Technology': Int64Index([4, 10, 11, 19, 25], dtype='int64')}

    id                     name  ..                   industry_group                                employees
1    2      American Express Co  ..       Credit Services                                59000
6   25                 Visa Inc  ..                 Credit Services                                17000
8    8  Goldman Sachs Group Inc  ..    Investment Brokerage - National    36600
14  13      JPMorgan Chase & Co  ..    Money Center Banks                      256105
23  22  Travelers Companies Inc  ..     Property & Casualty Insurance       30400

[5 rows x 7 columns]

Để chỉ ra rằng đối tượng groupby chỉ là một bản thiết kế, chúng ta có thể sao chép get_group bằng cách sử dụng iloc

print(companies.iloc[[1,6,8,14,23],[1,5,6]])

                       name                        industry_group                            employees
1       American Express Co            Credit Services                            59000
6       Visa Inc                                  Credit Services                            17000
8       Goldman Sachs Group Inc    Investment Brokerage - National 36600
14     JPMorgan Chase & Co          Money Center Banks                   256105
23     Travelers Companies Inc       Property & Casualty Insurance    30400

Tóm lại, groupby tạo một kế hoạch chi tiết cho phép chúng tôi chạy nhiều hoạt động hữu ích trên nhóm. Sử dụng đối tượng nhóm theo nhóm hiệu quả vì nó cho phép chúng ta có mối quan hệ một-nhiều liên quan đến việc tính giá trị nhóm

Ngoài ra, chúng ta có thể sử dụng sức mạnh của Pandas và sử dụng lập chỉ mục boolean và phương pháp tổng hợp để trả về số lượng công ty trong từng lĩnh vực

tổng hợp

Tập hợp lấy các giá trị và trả về một giá trị của thứ nguyên nhỏ hơn. Ví dụ: một hàm nhận vào một chuỗi và trả về một giá trị vô hướng duy nhất. Mọi tập hợp GroupBy ngầm hoặc rõ ràng đều có một cột nhóm, một cột tổng hợp và một cột chức năng. Các chức năng tổng hợp phổ biến được hiển thị bên dưới

FunctionDescriptionmean()Tính giá trị trung bình của các nhómsum()Tính tổng các giá trị của nhómsize()Tính toán kích thước nhómcount()Tính số lượng các nhómstd()Độ lệch chuẩn của các nhómvar()Tính toán phương sai của các nhómsem()Sai số chuẩn của giá trị trung bình của các nhómdescribe()Tạo mô tả

        name	                 sector
id
1	Apple Inc                Consumer Goods
2	American                Express Co Financial
3	Boeing Co              Industrial Goods
4	Caterpillar Inc	       Industrial Goods
5	Cisco Systems Inc Technology
0

        name	                 sector
id
1	Apple Inc                Consumer Goods
2	American                Express Co Financial
3	Boeing Co              Industrial Goods
4	Caterpillar Inc	       Industrial Goods
5	Cisco Systems Inc Technology
1

Chúng ta cũng có thể nhóm theo nhiều cột. Lưu ý rằng hàm tổng hợp được gọi tự động trên cột nhân viên vì đây là cột loại số duy nhất

        name	                 sector
id
1	Apple Inc                Consumer Goods
2	American                Express Co Financial
3	Boeing Co              Industrial Goods
4	Caterpillar Inc	       Industrial Goods
5	Cisco Systems Inc Technology
2

        name	                 sector
id
1	Apple Inc                Consumer Goods
2	American                Express Co Financial
3	Boeing Co              Industrial Goods
4	Caterpillar Inc	       Industrial Goods
5	Cisco Systems Inc Technology
3

gấu trúc. cốt lõi. theo nhóm. Khung dữ liệu. agg cho phép chúng tôi thực hiện nhiều thao tác tổng hợp cùng một lúc bao gồm cả các thao tác tổng hợp do người dùng xác định

        name	                 sector
id
1	Apple Inc                Consumer Goods
2	American                Express Co Financial
3	Boeing Co              Industrial Goods
4	Caterpillar Inc	       Industrial Goods
5	Cisco Systems Inc Technology
4

        name	                 sector
id
1	Apple Inc                Consumer Goods
2	American                Express Co Financial
3	Boeing Co              Industrial Goods
4	Caterpillar Inc	       Industrial Goods
5	Cisco Systems Inc Technology
5

chuyển đổi

Chuyển đổi trả về dữ liệu được thao tác có cùng kích thước với dữ liệu đã truyền. Có nhiều phương thức và chức năng theo ý của bạn để chuyển đổi dữ liệu, như hình bên dưới

Phương thức/Chức năngDescriptionSeries. mapThay thế từng giá trị cho một sê-ri khác. applyInvoke một hàm theo nguyên tố trên một seriesDataFrame. applymapÁp dụng một chức năng theo nguyên tố cho một khung dữ liệuDataFrame. áp dụngGọi một chức năng trên mỗi cột hoặc hàngSeries. biến đổi Gọi một hàm trả về chuỗi giá trị được chuyển đổiDataFrame. biến đổi Gọi một hàm trả về khung dữ liệu của các giá trị được chuyển đổi. tan chảy Định hình lại một khung dữ liệu. Hữu ích cho việc vẽ đồ thị, hoạt động vector hóa và thu dọn dữ liệu. gấu trúc. pivot Định hình lại một khung dữ liệu. Về cơ bản là một hoạt động unmelt

Trong ví dụ bên dưới, chúng tôi chuyển một hàm đã xác định find_percent và trả về chuỗi đã chuyển đổi

        name	                 sector
id
1	Apple Inc                Consumer Goods
2	American                Express Co Financial
3	Boeing Co              Industrial Goods
4	Caterpillar Inc	       Industrial Goods
5	Cisco Systems Inc Technology
6

        name	                 sector
id
1	Apple Inc                Consumer Goods
2	American                Express Co Financial
3	Boeing Co              Industrial Goods
4	Caterpillar Inc	       Industrial Goods
5	Cisco Systems Inc Technology
7

Như với agg, chúng ta có thể truyền nhiều hàm, bao gồm cả hàm lambda

        name	                 sector
id
1	Apple Inc                Consumer Goods
2	American                Express Co Financial
3	Boeing Co              Industrial Goods
4	Caterpillar Inc	       Industrial Goods
5	Cisco Systems Inc Technology
8

        name	                 sector
id
1	Apple Inc                Consumer Goods
2	American                Express Co Financial
3	Boeing Co              Industrial Goods
4	Caterpillar Inc	       Industrial Goods
5	Cisco Systems Inc Technology
9

Mặc dù chúng tôi không thể chuyển nhiều chức năng để áp dụng như chúng tôi có thể làm với biến đổi, nhưng chúng tôi có thể truy cập các cột khác bằng cách sử dụng áp dụng khi chúng tôi bị giới hạn với biến đổi. Một lần nữa, tốt nhất là biết những gì có sẵn cho bạn và sử dụng công cụ tốt nhất cho công việc tại thời điểm hiện tại

companies_smushed = pd.DataFrame()
companies_smushed['sector_employees'] = companies['sector'] + \
                                        companies['employees'].astype(str)
print(companies[['sector', 'employees']].head())
print(companies_smushed.head())
companies_smushed = companies_smushed['sector_employees'].str.extract(r'(\D+)(\d+)')
companies_smushed.head()
0

companies_smushed = pd.DataFrame()
companies_smushed['sector_employees'] = companies['sector'] + \
                                        companies['employees'].astype(str)
print(companies[['sector', 'employees']].head())
print(companies_smushed.head())
companies_smushed = companies_smushed['sector_employees'].str.extract(r'(\D+)(\d+)')
companies_smushed.head()
1

lọc

Bộ lọc trả về một tập hợp con của dữ liệu gốc. Nó hoạt động tương tự như lập chỉ mục boolean ngoại trừ thay vì hoạt động trên các hàng riêng lẻ, nó hoạt động trên các nhóm riêng lẻ. Bộ lọc phải trả về giá trị Đúng hoặc Sai cho toàn bộ nhóm. Lĩnh vực dịch vụ là lĩnh vực duy nhất có hơn 1.000.000 nhân viên

companies_smushed = pd.DataFrame()
companies_smushed['sector_employees'] = companies['sector'] + \
                                        companies['employees'].astype(str)
print(companies[['sector', 'employees']].head())
print(companies_smushed.head())
companies_smushed = companies_smushed['sector_employees'].str.extract(r'(\D+)(\d+)')
companies_smushed.head()
2

companies_smushed = pd.DataFrame()
companies_smushed['sector_employees'] = companies['sector'] + \
                                        companies['employees'].astype(str)
print(companies[['sector', 'employees']].head())
print(companies_smushed.head())
companies_smushed = companies_smushed['sector_employees'].str.extract(r'(\D+)(\d+)')
companies_smushed.head()
3

Bảng tổng hợp

Chúng tôi có thể tạo cùng một dữ liệu ở định dạng khác bằng cách sử dụng gấu trúc. trục_bảng

companies_smushed = pd.DataFrame()
companies_smushed['sector_employees'] = companies['sector'] + \
                                        companies['employees'].astype(str)
print(companies[['sector', 'employees']].head())
print(companies_smushed.head())
companies_smushed = companies_smushed['sector_employees'].str.extract(r'(\D+)(\d+)')
companies_smushed.head()
4

companies_smushed = pd.DataFrame()
companies_smushed['sector_employees'] = companies['sector'] + \
                                        companies['employees'].astype(str)
print(companies[['sector', 'employees']].head())
print(companies_smushed.head())
companies_smushed = companies_smushed['sector_employees'].str.extract(r'(\D+)(\d+)')
companies_smushed.head()
5

tham gia dữ liệu

Chúng ta có thể nhanh chóng nối hai khung dữ liệu thông qua nối, hợp nhất và nối. Hợp nhất là chức năng cơ bản cho tất cả các hành vi tham gia/hợp nhất. Tham gia có các giá trị mặc định hơi khác và được cung cấp như một phương pháp thuận tiện

Kỹ thuật thao tác dữ liệu trong Python là gì?

Các phương pháp thao tác dữ liệu với Python .
Lọc các giá trị trên cơ sở điều kiện đã cho. .
Áp dụng một chức năng nhất định để tạo một biến mới hoặc thực hiện các hoạt động liên quan. .
Sử dụng chức năng trục để tổng hợp trên cột mong muốn. .
Chức năng của bảng chéo. .
Hợp nhất 2 bảng. .
Sắp xếp một bảng

Python có tốt cho thao tác dữ liệu không?

Python là một phần có giá trị trong hộp công cụ của nhà phân tích dữ liệu, vì nó được thiết kế riêng để thực hiện các tác vụ lặp đi lặp lại và thao tác dữ liệu và bất kỳ ai từng làm việc với lượng dữ liệu lớn đều biết .

Những lợi thế chính của Pandas trong thao tác dữ liệu là gì?

1. 1. Sự miêu tả dữ liệu. Pandas cung cấp các hình thức biểu diễn dữ liệu cực kỳ hợp lý. .
1. 2. Viết ít hơn và hoàn thành nhiều việc hơn. .
1. 3. Một tập hợp các tính năng phong phú. .
1. 4. Xử lý hiệu quả dữ liệu lớn. .
1. 5. Làm cho dữ liệu linh hoạt và có thể tùy chỉnh. .
1. 6. Dành cho Python

NumPy có được sử dụng để thao tác dữ liệu không?

Thao tác dữ liệu trong Python gần như đồng nghĩa với thao tác mảng NumPy . ngay cả những công cụ mới hơn như Pandas (Chương 3) cũng được xây dựng xung quanh mảng NumPy. Phần này sẽ trình bày một số ví dụ về việc sử dụng thao tác mảng NumPy để truy cập dữ liệu và các mảng con, đồng thời để phân tách, định hình lại và nối các mảng.