Hợp nhất các tệp gấu trúc Python
Trong mọi tình huống khoa học dữ liệu trong thế giới thực với Python, bạn sẽ mất khoảng 10 phút để hợp nhất hoặc tham gia các Khung dữ liệu Pandas lại với nhau để tạo thành tập dữ liệu phân tích của mình. Hợp nhất và tham gia các khung dữ liệu là một quy trình cốt lõi mà bất kỳ nhà phân tích dữ liệu tham vọng nào cũng cần phải thành thạo. Bài đăng trên blog này đề cập đến quá trình hợp nhất các bộ dữ liệu, nghĩa là nối hai bộ dữ liệu lại với nhau dựa trên các cột chung giữa chúng. Các chủ đề chính được đề cập ở đây Show
Nếu bạn muốn tự mình thực hiện hướng dẫn, tôi đang sử dụng thiết lập sổ ghi chép Jupyter với Python từ Anaconda và tôi đã đăng mã trên GitHub tại đây. Tôi đã đưa bộ dữ liệu mẫu vào kho lưu trữ GitHub Tổng quan về hợp nhất nếu bạn cần bắt đầu nhanh (tất cả các giải thích bên dưới). Lệnh hợp nhất của Pandas () lấy các khung dữ liệu bên trái và bên phải, khớp các hàng dựa trên các cột "trên" và thực hiện các loại hợp nhất khác nhau - trái, phải, v.v.Dữ liệu mẫuĐối với bài đăng này, tôi đã lấy một số dữ liệu thực từ ứng dụng KillBiller và một số dữ liệu đã tải xuống, chứa trong ba tệp CSV
Chúng tôi có thể tải các tệp CSV này dưới dạng Pandas DataFrames vào pandas bằng lệnh Pandas read_csv và kiểm tra nội dung bằng lệnh Thông tin sử dụng mẫu từ ứng dụng KillBiller hiển thị số liệu thống kê sử dụng thiết bị di động hàng tháng cho một nhóm nhỏ người dùngThông tin người dùng từ ứng dụng KillBiller cung cấp phiên bản thiết bị và hệ điều hành cho từng “việc sử dụng” ứng dụng KillBillerDữ liệu thiết bị Android, chứa tất cả các thiết bị Android có chi tiết về nhà sản xuất và kiểu máyCó các thuộc tính liên kết giữa các tập dữ liệu mẫu cần lưu ý – “use_id” được chia sẻ giữa user_usage và user_device, đồng thời cột “device” của user_device và cột “Model” của tập dữ liệu thiết bị chứa các mã phổ biến vấn đề mẫuChúng tôi muốn xác định xem các kiểu sử dụng của người dùng có khác nhau giữa các thiết bị khác nhau không. Ví dụ: người dùng sử dụng thiết bị Samsung có sử dụng nhiều phút gọi hơn những người sử dụng thiết bị LG không? Chúng tôi muốn tạo một khung dữ liệu duy nhất với các cột cho số liệu sử dụng của người dùng (số cuộc gọi mỗi tháng, sms mỗi tháng, v.v.) và cả các cột có thông tin thiết bị (kiểu máy, nhà sản xuất, v.v.). Chúng tôi sẽ cần “hợp nhất” (hoặc “tham gia”) các bộ dữ liệu mẫu của chúng tôi lại với nhau thành một bộ dữ liệu duy nhất để phân tích Hợp nhất khung dữ liệu
Các từ "hợp nhất" và "tham gia" được sử dụng tương đối thay thế cho nhau trong Pandas và các ngôn ngữ khác, cụ thể là SQL và R. Trong Pandas, có các hàm "hợp nhất" và "" riêng biệt, cả hai đều làm những việc tương tự nhau Trong trường hợp ví dụ này, chúng tôi sẽ cần thực hiện hai bước
Tôi có thể sử dụng vòng lặp for không?Đúng. Bạn có thể viết các vòng lặp cho nhiệm vụ này. Đầu tiên sẽ lặp qua use_id trong tập dữ liệu user_usage, sau đó tìm phần tử phù hợp trong user_devices. Vòng lặp for thứ hai sẽ lặp lại quy trình này cho các thiết bị Tuy nhiên, việc sử dụng vòng lặp for sẽ chậm hơn và dài dòng hơn nhiều so với việc sử dụng chức năng hợp nhất của Pandas. Vì vậy, nếu bạn gặp tình huống này – đừng sử dụng vòng lặp for Hợp nhất user_usage với user_devicesHãy xem cách chúng ta có thể thêm chính xác cột "thiết bị" và "nền tảng" vào khung dữ liệu user_usage bằng cách sử dụng lệnh Pandas Merge result = pd.merge(user_usage, user_device[['use_id', 'platform', 'device']], on='use_id') result.head()Kết quả hợp nhất việc sử dụng của người dùng với các thiết bị của người dùng dựa trên một cột chung Vì vậy, nó hoạt động, và rất dễ dàng. Bây giờ – nó hoạt động như thế nào? . hợp nhất lệnh đang làm gì? Cách hoạt động của các lệnh Hợp nhất Pandas. Ít nhất, việc hợp nhất yêu cầu tập dữ liệu “trái”, tập dữ liệu “phải” và một cột chung để hợp nhất “trên”Lệnh hợp nhất là mục tiêu học tập chính của bài đăng này. Thao tác hợp nhất đơn giản nhất lấy khung dữ liệu bên trái (đối số đầu tiên), khung dữ liệu bên phải (đối số thứ hai), sau đó là tên cột hợp nhất hoặc cột để hợp nhất “trên”. Trong đầu ra/kết quả, các hàng từ các khung dữ liệu bên trái và bên phải được đối sánh với các giá trị chung của cột hợp nhất được chỉ định bởi "bật" Với kết quả này, giờ đây chúng ta có thể chuyển sang lấy số nhà sản xuất và kiểu máy từ tập dữ liệu “thiết bị”. Tuy nhiên, trước tiên chúng ta cần hiểu thêm một chút về các loại hợp nhất và kích thước của khung dữ liệu đầu ra Các loại hợp nhất bên trong, bên trái và bên phảiTrong ví dụ của chúng tôi ở trên, chúng tôi đã hợp nhất user_usage với user_devices. Bản xem trước head() của kết quả trông rất tuyệt, nhưng điều này còn nhiều điều hơn là bắt mắt. Trước tiên, hãy xem kích thước hoặc hình dạng của đầu vào và đầu ra của lệnh hợp nhất Kích thước kết quả của tập dữ liệu sau thao tác hợp nhất có thể không như mong đợi. Pandas merge() mặc định là thao tác hợp nhất “bên trong”Tại sao kết quả có kích thước khác với cả hai khung dữ liệu gốc? Theo mặc định, hoạt động hợp nhất Pandas hoạt động với một hợp nhất "bên trong". Hợp nhất bên trong, (hoặc nối bên trong) chỉ giữ các giá trị chung trong cả khung dữ liệu bên trái và bên phải cho kết quả. Trong ví dụ của chúng tôi ở trên, chỉ những hàng chứa giá trị use_id phổ biến giữa user_usage và user_device mới được lưu lại trong tập dữ liệu kết quả. Chúng ta có thể xác thực điều này bằng cách xem có bao nhiêu giá trị phổ biến Chỉ các giá trị chung giữa các khung dữ liệu bên trái và bên phải được giữ lại theo mặc định trong Pandas, tôi. e. hợp nhất "bên trong" được sử dụngCó 159 giá trị của use_id trong bảng user_usage xuất hiện trong user_device. Đây là những giá trị giống nhau cũng xuất hiện trong khung dữ liệu kết quả cuối cùng (159 hàng) Các loại hợp nhất khácCó ba loại hợp nhất khác nhau có sẵn trong Pandas. Các loại hợp nhất này là phổ biến trên hầu hết các ngôn ngữ hướng dữ liệu và cơ sở dữ liệu (SQL, R, SAS) và thường được gọi là "tham gia". Nếu bạn chưa biết chúng, hãy tìm hiểu chúng ngay bây giờ
Loại hợp nhất sẽ sử dụng được chỉ định bằng cách sử dụng tham số “làm thế nào” trong lệnh hợp nhất, nhận các giá trị “trái”, “phải”, “bên trong” (mặc định) hoặc “bên ngoài” Sơ đồ Venn thường được sử dụng để minh họa các loại hợp nhất và nối khác nhau. Xem ví dụ này từ Stack tràn Hợp nhất/Nối các loại như được sử dụng trong Pandas, R, SQL và các ngôn ngữ và thư viện định hướng dữ liệu khác. Nguồn. tràn ngăn xếpNếu đây là điều mới mẻ đối với bạn hoặc bạn đang cau mày nhìn vào phần trên, hãy dành thời gian xem video này về "hợp nhất các khung dữ liệu" từ Coursera để có một lời giải thích khác có thể hữu ích. Bây giờ chúng ta sẽ xem xét từng loại hợp nhất chi tiết hơn và làm việc thông qua các ví dụ về từng loại Ví dụ về hợp nhất trái / nối tráiHãy lặp lại thao tác hợp nhất của chúng ta, nhưng lần này hãy thực hiện "hợp nhất bên trái" trong Pandas
Bạn có thể thay đổi hợp nhất thành hợp nhất trái với tham số “làm thế nào” cho lệnh hợp nhất của bạn. Phần trên cùng của khung dữ liệu kết quả chứa các mục được khớp thành công và ở dưới cùng chứa các hàng trong user_usage không có use_id tương ứng trong user_device result = pd.merge(user_usage, user_device[['use_id', 'platform', 'device']], on='use_id', how='left')Ví dụ nối trái trong pandas. Chỉ định loại tham gia trong lệnh “làm thế nào”. Nối trái hoặc hợp nhất trái, giữ mọi hàng từ khung dữ liệu bên tráiKết quả từ việc nối trái hoặc hợp nhất trái của hai khung dữ liệu trong Pandas. Các hàng trong khung dữ liệu bên trái không có giá trị nối tương ứng trong khung dữ liệu bên phải được để lại với các giá trị NaN Ví dụ về hợp nhất bên phải/nối bên phảiVí dụ, chúng ta có thể lặp lại quy trình này với nối phải / hợp nhất phải, chỉ bằng cách thay thế how=’left’ bằng how=’right’ trong lệnh hợp nhất Pandas result = pd.merge(user_usage, user_device[['use_id', 'platform', 'device']], on='use_id', how='right') Kết quả dự kiến sẽ có cùng số hàng như khung dữ liệu bên phải, user_device, nhưng có một số giá trị NaN hoặc trống trong các cột bắt nguồn từ khung dữ liệu bên trái, user_usage (cụ thể là “outgoing_mins_per_month”, “outgoing_sms_per_month” và “monthly_mb”). Ngược lại, chúng tôi mong đợi không có giá trị nào bị thiếu trong các cột bắt nguồn từ khung dữ liệu bên phải, “user_device” Ví dụ về hợp nhất phải hoặc nối phải. Lưu ý rằng đầu ra có cùng số hàng với khung dữ liệu bên phải, chỉ thiếu các giá trị khi use_id trong khung dữ liệu bên trái không khớp với bất kỳ thứ gì ở bên tráiVí dụ về kết hợp bên ngoài/nối bên ngoài đầy đủCuối cùng, chúng tôi sẽ thực hiện hợp nhất bên ngoài bằng cách sử dụng Pandas, còn được gọi là "nối ngoài đầy đủ" hoặc chỉ "nối bên ngoài". Phép nối ngoài có thể được coi là sự kết hợp của phép nối trái và phải hoặc ngược lại với phép nối trong. Trong các liên kết bên ngoài, mọi hàng từ các khung dữ liệu bên trái và bên phải được giữ lại trong kết quả, với các NaN không có biến liên kết phù hợp Như vậy, chúng tôi hy vọng kết quả sẽ có cùng số lượng hàng vì có các giá trị riêng biệt của “use_id” giữa user_device và user_usage, i. e. mọi giá trị nối từ khung dữ liệu bên trái sẽ có trong kết quả cùng với mọi giá trị từ khung dữ liệu bên phải và chúng sẽ được liên kết nếu có thể Trong sơ đồ bên dưới, các hàng ví dụ từ kết quả hợp nhất bên ngoài được hiển thị, hai hàng đầu tiên là các ví dụ trong đó "use_id" phổ biến giữa các khung dữ liệu, hai hàng thứ hai chỉ bắt nguồn từ khung dữ liệu bên trái và hai hàng cuối cùng chỉ bắt nguồn từ bên phải Sử dụng chỉ báo hợp nhất để theo dõi hợp nhấtĐể hỗ trợ xác định vị trí các hàng bắt nguồn từ đâu, Pandas cung cấp một tham số "chỉ báo" có thể được sử dụng với hàm hợp nhất để tạo một cột bổ sung có tên là "_merge" trong đầu ra gắn nhãn nguồn ban đầu cho mỗi hàng result = pd.merge(user_usage, user_device[['use_id', 'platform', 'device']], on='use_id', how='outer', indicator=True)Các hàng ví dụ từ kết quả hợp nhất bên ngoài (nối bên ngoài đầy đủ). Lưu ý rằng tất cả các hàng từ khung dữ liệu hợp nhất bên trái và bên phải đều được bao gồm, nhưng NaN sẽ nằm trong các cột khác nhau tùy thuộc vào việc dữ liệu bắt nguồn từ khung dữ liệu bên trái hay bên phải Hợp nhất cuối cùng – Kết hợp các chi tiết thiết bị để tạo kết quảQuay trở lại vấn đề ban đầu của chúng tôi, chúng tôi đã hợp nhất user_usage với user_device, vì vậy chúng tôi có nền tảng và thiết bị cho mỗi người dùng. Ban đầu, chúng tôi đã sử dụng "hợp nhất bên trong" làm mặc định trong Pandas và do đó, chúng tôi chỉ có các mục nhập dành cho người dùng có cả thông tin thiết bị. Chúng tôi sẽ thực hiện lại quá trình hợp nhất này bằng cách sử dụng một phép nối bên trái để giữ tất cả người dùng, sau đó sử dụng phép hợp nhất bên trái thứ hai để cuối cùng đưa các nhà sản xuất thiết bị vào cùng một khung dữ liệu # First, add the platform and device to the user usage - use a left join this time. result = pd.merge(user_usage, user_device[['use_id', 'platform', 'device']], on='use_id', how='left') # At this point, the platform and device columns are included # in the result along with all columns from user_usage # Now, based on the "device" column in result, match the "Model" column in devices. devices.rename(columns={"Retail Branding": "manufacturer"}, inplace=True) result = pd.merge(result, devices[['manufacturer', 'Model']], left_on='device', right_on='Model', how='left') print(result.head())Kết quả hợp nhất cuối cùng với thông tin nhà sản xuất thiết bị được hợp nhất vào bảng sử dụng của người dùng. Hai lần hợp nhất bên trái đã được sử dụng để đi đến điểm này Sử dụng left_on và right_on để hợp nhất với các tên cột khác nhauCác cột được sử dụng trong toán tử hợp nhất không cần phải được đặt tên giống nhau trong cả khung dữ liệu bên trái và bên phải. Trong lần hợp nhất thứ hai ở trên, lưu ý rằng ID thiết bị được gọi là "thiết bị" trong khung dữ liệu bên trái và được gọi là "Mẫu" trong khung dữ liệu bên phải Các tên cột khác nhau được chỉ định cho các hợp nhất trong Pandas bằng cách sử dụng thông số “left_on” và “right_on”, thay vì chỉ sử dụng thông số “on” Việc hợp nhất các khung dữ liệu với các tên khác nhau cho biến tham gia đạt được bằng cách sử dụng các đối số left_on và right_on cho hàm hợp nhất gấu trúcTính toán số liệu thống kê dựa trên thiết bịKhi quá trình hợp nhất của chúng tôi hoàn tất, chúng tôi có thể sử dụng chức năng tổng hợp dữ liệu của Pandas để nhanh chóng tìm ra mức sử dụng trung bình cho người dùng dựa trên nhà sản xuất thiết bị. Lưu ý rằng kích thước mẫu nhỏ thậm chí còn tạo ra các nhóm nhỏ hơn, vì vậy tôi sẽ không gán bất kỳ ý nghĩa thống kê nào cho những kết quả cụ thể này result.groupby("manufacturer").agg({ "outgoing_mins_per_month": "mean", "outgoing_sms_per_month": "mean", "monthly_mb": "mean", "use_id": "count" })Kết quả cuối cùng bằng cách sử dụng tổng hợp gấu trúc agg() để nhóm theo nhà sản xuất thiết bị và tính số liệu thống kê trung bình cho các cột khác nhau Trở thành bậc thầy về sáp nhập – Phần 2Điều đó hoàn thành phần đầu tiên của hướng dẫn hợp nhất này. Bây giờ bạn đã chinh phục được những kiến thức cơ bản về hợp nhất và có thể giải quyết các vấn đề về hợp nhất và kết hợp của riêng bạn với thông tin ở trên. Phần 2 của bài đăng trên blog này đề cập đến các chủ đề nâng cao hơn sau đây
Các tài nguyên hữu ích khácĐừng để khả năng kết hợp của bạn dừng lại ở đây. Hãy thử các liên kết sau để được giải thích thêm và thông tin về chủ đề này Làm cách nào để kết hợp 2 tệp CSV trong gấu trúc?Để hợp nhất tất cả các tệp CSV, hãy sử dụng mô-đun GLOB . hệ điều hành. con đường. phương thức join() được sử dụng bên trong concat() để hợp nhất các tệp CSV lại với nhau.
Làm cách nào để hợp nhất hai tập dữ liệu trong gấu trúc?Hàm hợp nhất Pandas DataFrame() được sử dụng để hợp nhất hai đối tượng DataFrame bằng thao tác nối kiểu cơ sở dữ liệu . Việc nối được thực hiện trên các cột hoặc chỉ mục. Nếu việc nối được thực hiện trên các cột, các chỉ mục sẽ bị bỏ qua. Hàm này trả về một DataFrame mới và các đối tượng DataFrame nguồn không thay đổi.
Làm cách nào để hợp nhất 3 tệp CSV trong Python?Cách kết hợp nhiều tệp CSV bằng Python để phân tích . Nhập tệp vào DataFrames của gấu trúc. . Thiết lập thư mục làm việc. . Kết hợp nhiều tệp với cấu trúc bảng tương tự bằng pandas. Khung dữ liệu. nối thêm (). Kết hợp nhiều tệp với cấu trúc bảng tương tự bằng gấu trúc. concat() Hợp nhất () trong Python là gì?Phương thức merge() cập nhật nội dung của hai DataFrame bằng cách hợp nhất chúng lại với nhau , sử dụng (các) phương thức đã chỉ định. |