Làm chủ việc chuyển đổi dữ liệu trong Pandas với ba kỹ thuật hữu ích này

Đi sâu vào lọc, thao tác và hoạt động

Photo by Milad Fakurian on Unsplash

Hãy nghĩ lại lần cuối cùng bạn làm việc với một tập dữ liệu được định dạng đẹp mắt. Các cột được đặt tên rõ ràng, giá trị còn thiếu tối thiểu và cách tổ chức hợp lý. Đó là một cảm giác tuyệt vời — gần như được giải phóng — được ban phước với dữ liệu mà bạn không cần phải dọn dẹp và biến đổi.

Chà, thật tuyệt cho đến khi bạn thoát khỏi giấc mơ ban ngày của mình và tiếp tục mày mò với mớ hỗn độn vô vọng của những hàng gãy và những nhãn hiệu vô nghĩa trước mặt bạn.

Không có thứ gọi là dữ liệu sạch (ở dạng ban đầu). Nếu bạn là một nhà khoa học dữ liệu, bạn sẽ biết điều này. Nếu bạn mới bắt đầu, bạn nên chấp nhận điều này. Bạn sẽ cần phải chuyển đổi dữ liệu của mình để làm việc với nó một cách hiệu quả.

Hãy nói về ba cách để làm như vậy.

Lọc - nhưng được giải thích đúng cách

Hãy nói về việc lọc - nhưng sâu hơn một chút so với những gì bạn có thể quen làm. Là một trong những hoạt động chuyển đổi dữ liệu phổ biến và hữu ích nhất, lọc hiệu quả là kỹ năng bắt buộc phải có đối với bất kỳ nhà khoa học dữ liệu nào. Nếu bạn biết Pandas, đây có thể là một trong những thao tác đầu tiên bạn học thực hiện.

Chúng ta hãy xem lại, sử dụng ví dụ yêu thích, linh hoạt đến kỳ lạ của tôi: DataFrame gồm các điểm của học sinh, được gọi một cách khéo léo grades:

Hình ảnh của Tác giả

Chúng tôi sẽ lọc ra bất kỳ điểm nào dưới 90, bởi vì vào ngày này, chúng tôi quyết định trở thành những nhà giáo dục được đào tạo kém, chỉ phục vụ những học sinh giỏi nhất (xin đừng bao giờ thực sự làm điều này). Dòng mã tiêu chuẩn để thực hiện việc này như sau:

điểm[điểm['Điểm'] >= 90]
Hình ảnh của Tác giả

Điều đó để lại chúng ta với Jack và Hermione. Mát mẻ. Nhưng chính xác thì chuyện gì đã xảy ra ở đây? Tại sao dòng mã trên có hoạt động không? Hãy tìm hiểu sâu hơn một chút bằng cách xem kết quả của biểu thức bên trong dấu ngoặc ngoài ở trên:

điểm['Điểm'] >= 90
Hình ảnh của Tác giả

À được rồi. Điều đó có ý nghĩa. Có vẻ như dòng mã này trả về một đối tượng Pandas Series chứa Boolean ( True / False ) các giá trị được xác định bởi cái gì >= 90 được trả về cho từng hàng riêng lẻ. Đây là bước trung gian quan trọng. Sau đó, Chuỗi Boolean này sẽ được chuyển vào dấu ngoặc ngoài và lọc tất cả các hàng tương ứng.

Để hoàn thiện, tôi cũng sẽ đề cập rằng hành vi tương tự có thể đạt được bằng cách sử dụng loc từ khóa:

Grades.loc[grades['Score'] >= 90]
Hình ảnh của Tác giả

Có một số lý do chúng ta có thể chọn sử dụng loc (một trong số đó là nó thực sự cho phép chúng ta lọc các hàng và cột thông qua một thao tác duy nhất), nhưng điều đó mở ra các hoạt động của Pandora's Box of Pandas mà tốt nhất nên để lại cho một bài viết khác.

Hiện tại, mục tiêu học tập quan trọng là: khi chúng ta lọc trong Pandas, cú pháp khó hiểu không phải là một loại phép thuật kỳ lạ nào đó. Chúng ta chỉ cần chia nó thành hai bước thành phần: 1) lấy Chuỗi Boolean gồm các hàng thỏa mãn điều kiện của chúng ta và 2) sử dụng Chuỗi để lọc toàn bộ DataFrame.

Bạn có thể hỏi tại sao điều này lại hữu ích? Chà, nói chung, nó có thể dẫn đến những lỗi khó hiểu nếu bạn chỉ sử dụng các thao tác mà không hiểu chúng thực sự hoạt động như thế nào. Lọc là một thao tác hữu ích và cực kỳ phổ biến và giờ đây bạn đã biết cách hoạt động của nó.

Tiếp tục nào.

Vẻ đẹp của hàm Lambda

Đôi khi, dữ liệu của bạn yêu cầu các chuyển đổi không được tích hợp sẵn với chức năng của Pandas. Hãy cố gắng hết sức có thể, việc lùng sục Stack Overflow hay chăm chỉ khám phá tài liệu Pandas sẽ không tìm ra giải pháp cho vấn đề của bạn.

Nhập các hàm lambda — một tính năng ngôn ngữ hữu ích tích hợp tuyệt vời với Pandas.

Để đánh giá nhanh, đây là cách hoạt động của lambdas:

>>> add_function = lambda x, y: x + y
>>> add_function(2, 3)
5

Hàm Lambda không khác gì các hàm thông thường, ngoại trừ việc chúng có cú pháp ngắn gọn hơn:

  • Tên hàm ở bên trái dấu bằng
  • Sản phẩm lambda từ khóa bên phải dấu bằng (tương tự như def từ khóa trong định nghĩa hàm Python truyền thống, điều này cho Python biết chúng ta đang xác định một hàm).
  • (Các) thông số sau lambda từ khóa, ở bên trái của dấu hai chấm.
  • Trả về giá trị ở bên phải dấu hai chấm.

Bây giờ, hãy áp dụng hàm lambda vào tình huống thực tế.

Các bộ dữ liệu thường có các đặc điểm định dạng riêng, cụ thể cho các biến thể trong việc nhập và thu thập dữ liệu. Do đó, dữ liệu bạn đang làm việc có thể có những vấn đề cụ thể kỳ lạ mà bạn cần giải quyết. Ví dụ: hãy xem xét tập dữ liệu đơn giản bên dưới, lưu trữ tên người và thu nhập của họ. Hãy gọi nó là monies.

Hình ảnh của Tác giả

Giờ đây, với tư cách là Master Data Highness của công ty này, chúng tôi đã được cung cấp một số thông tin tuyệt mật: mọi người trong công ty này sẽ được tăng lương 10% cộng thêm 1000 USD. Đây có lẽ là một phép tính quá cụ thể để tìm ra một phương pháp cụ thể, nhưng cũng đủ đơn giản với hàm lambda:

update_ thu nhập = lambda num: num + (num * .10) + 1000

Sau đó, tất cả những gì chúng ta cần làm là sử dụng chức năng này với Pandas apply hàm, cho phép chúng ta áp dụng một hàm cho mọi phần tử của Sê-ri đã chọn:

tiền['Thu nhập mới'] = tiền['Thu nhập'].apply(update_ thu nhập)
tiền bạc
Hình ảnh của Tác giả

Và chúng ta đã hoàn tất! Một DataFrame mới tuyệt vời bao gồm chính xác thông tin chúng tôi cần, tất cả đều có trong hai dòng mã. Để làm cho nó ngắn gọn hơn nữa, chúng ta thậm chí có thể định nghĩa hàm lambda bên trong apply trực tiếp — một mẹo hay đáng ghi nhớ.

Tôi sẽ giữ vấn đề ở đây đơn giản.

Lambdas cực kỳ hữu ích và do đó, bạn nên sử dụng chúng. Thưởng thức!

Hàm thao tác chuỗi chuỗi

Trong phần trước, chúng ta đã nói về tính linh hoạt của hàm lambda và tất cả những điều thú vị mà chúng có thể giúp bạn thực hiện với dữ liệu của mình. Thật tuyệt vời, nhưng bạn nên cẩn thận để không bị cuốn đi. Việc bị cuốn vào một cách làm quen thuộc đến mức bỏ lỡ những phím tắt đơn giản hơn mà Python đã ban tặng cho các lập trình viên là điều cực kỳ phổ biến. Tất nhiên, điều này không chỉ áp dụng cho lambdas, nhưng chúng tôi sẽ tiếp tục thực hiện điều đó vào lúc này.

Ví dụ: giả sử chúng ta có DataFrame sau được gọi là names nơi lưu trữ họ và tên của mọi người:

Hình ảnh của Tác giả

Hiện tại, do giới hạn về không gian trong cơ sở dữ liệu của chúng tôi, chúng tôi quyết định rằng thay vì lưu trữ toàn bộ họ của một người, sẽ hiệu quả hơn nếu chỉ lưu trữ tên viết tắt cuối cùng của họ. Vì vậy, chúng ta cần chuyển đổi 'Last Name' cột tương ứng. Với lambdas, nỗ lực của chúng tôi khi làm như vậy có thể trông giống như sau:

tên['Họ'] = tên['Họ'].apply(lambda s: s[:1])
tên
Hình ảnh của Tác giả

Điều này rõ ràng hoạt động, nhưng nó hơi rắc rối và do đó không giống Pythonic như nó có thể. May mắn thay, với vẻ đẹp của các hàm thao tác chuỗi trong Pandas, có một cách khác thanh lịch hơn (với mục đích của dòng mã tiếp theo, hãy tiếp tục và giả sử rằng chúng ta chưa thay đổi 'Last Name' cột có mã ở trên):

tên['Họ'] = tên['Họ'].str[:1]
tên
Hình ảnh của Tác giả

Ta-da! Các .str thuộc tính của Chuỗi Pandas cho phép chúng ta ghép từng chuỗi trong chuỗi bằng một thao tác chuỗi được chỉ định, giống như thể chúng ta đang làm việc với từng chuỗi riêng lẻ.

Nhưng chờ đợi, nó sẽ tốt hơn. Từ .str cho phép chúng ta truy cập chức năng bình thường của một chuỗi thông qua Chuỗi một cách hiệu quả, chúng ta cũng có thể áp dụng một loạt hàm chuỗi để giúp xử lý dữ liệu của mình một cách nhanh chóng! Ví dụ: giả sử chúng tôi quyết định chuyển đổi cả hai cột thành chữ thường. Đoạn mã sau thực hiện công việc:

tên['Tên'] = tên['Tên'].str.low()
tên['Họ'] = tên['Họ'].str.low()
tên
Hình ảnh của Tác giả

Đơn giản hơn nhiều so với việc gặp rắc rối khi xác định các hàm lambda của riêng bạn và gọi các hàm chuỗi bên trong nó. Không phải là tôi không yêu thích lambdas - nhưng mọi thứ đều có vị trí của nó và sự đơn giản luôn được ưu tiên trong Python.

Tôi chỉ đề cập đến một vài ví dụ ở đây, nhưng một bộ sưu tập lớn các hàm chuỗi theo ý của bạn [1.

Sử dụng chúng một cách tự do. Họ thật xuất sắc.

Suy nghĩ cuối cùng và tóm tắt

Đây là một bảng tóm tắt nhỏ về chuyển đổi dữ liệu dành cho bạn:

  1. Lọc theo ý bạn. Tìm hiểu những gì đang thực sự xảy ra để bạn biết bạn đang làm gì.
  2. Yêu lambdas của bạn. Họ có thể giúp bạn thao tác dữ liệu theo những cách tuyệt vời.
  3. Gấu trúc yêu dây nhiều như bạn. Có rất nhiều chức năng tích hợp — bạn cũng có thể sử dụng nó.

Đây là lời khuyên cuối cùng: không có cách nào “chính xác” để lọc một tập dữ liệu. Nó phụ thuộc vào dữ liệu có sẵn cũng như vấn đề duy nhất mà bạn đang tìm cách giải quyết. Tuy nhiên, mặc dù không có phương pháp cố định nào mà bạn có thể làm theo mỗi lần, nhưng vẫn có một bộ công cụ hữu ích đáng để bạn tùy ý sử dụng. Trong bài viết này, tôi đã thảo luận về ba trong số đó.

Tôi khuyến khích bạn ra ngoài và tìm thêm một số.

dự án

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

Chuyển đổi dữ liệu tổng thể trong gấu trúc với ba kỹ thuật hữu ích này được xuất bản lại từ nguồn https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-two-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 qua https://towardsdatascience.com/feed

<!–

->

Dấu thời gian:

Thêm từ Tư vấn chuỗi khối