Làm cách nào để nối hai khung dữ liệu trong một cột trong python?
Để hợp nhất hai Pandas DataFrame với cột chung, hãy sử dụng hàm merge() và đặt tham số BẬT làm tên cột Show
Đầu tiên, chúng ta hãy nhập thư viện gấu trúc với bí danh - import pandas as pd Hãy để chúng tôi tạo DataFrame đầu tiên - dataFrame1 = pd.DataFrame( { "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],"Units": [100, 150, 110, 80, 110, 90] } ) Tiếp theo, tạo DataFrame thứ 2 - dataFrame2 = pd.DataFrame( { "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Mercedes', 'Jaguar'],"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000] } ) Bây giờ, hợp nhất hai DataFrames với một cột cột “Xe hơi” − mergedRes = pd.merge(dataFrame1, dataFrame2, on ='Car') Thí dụSau đây là mã hoàn chỉnh - import pandas as pd # Create DataFrame1 dataFrame1 = pd.DataFrame( { "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],"Units": [100, 150, 110, 80, 110, 90] } ) print"DataFrame1 ... đầu raĐiều này sẽ tạo ra đầu ra sau - DataFrame1 ... Car Units 0 BMW 100 1 Lexus 150 2 Audi 110 3 Mustang 80 4 Bentley 110 5 Jaguar 90 DataFrame2 ... Car Reg_Price 0 BMW 7000 1 Lexus 1500 2 Audi 5000 3 Mustang 8000 4 Mercedes 9000 5 Jaguar 6000 Merged data frame with common column... Car Units Reg_Price 0 BMW 100 7000 1 Lexus 150 1500 2 Audi 110 5000 3 Mustang 80 8000 4 Jaguar 90 6000 Cập nhật ngày 22-Sep-2021 12. 12. 13 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
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 gấu trúc bằng cách sử dụng lệnh Pandas read_csv và kiểm tra nội dung bằng cách sử dụng lệnh DataFrame head() 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 KillBillerCó 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 chức năng "hợp nhất" và "tham gia" riêng biệt, cả hai đều làm những việc tương tự 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 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 ________số 8Kế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ề 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 Do đó, 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ể Kết quả hợp nhất bên ngoài bằng Pandas. 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 giá trị bị thiếu hoặc các giá trị NaN khó hiểu trong đó cột hợp nhất không khớpTrong 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 dataFrame1 = pd.DataFrame( { "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],"Units": [100, 150, 110, 80, 110, 90] } )0Kế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” 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 dataFrame1 = pd.DataFrame( { "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],"Units": [100, 150, 110, 80, 110, 90] } )1Kế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 Bạn có thể nối hai DataFrames trong Python không?Sử dụng gấu trúc.
phương thức concat() để nối hai DataFrame theo hàng nghĩa là nối thêm hai DataFrame. Theo mặc định, nó thực hiện các hoạt động chắp thêm tương tự như một liên kết trong đó nó làm sáng tất cả các hàng từ cả hai Khung dữ liệu thành một Khung dữ liệu duy nhất.
3 cách chính để kết hợp DataFrames với nhau là gì?Việc nối hai DataFrame có thể được thực hiện theo nhiều cách ( trái, phải và bên trong ) tùy thuộc vào dữ liệu phải có trong DataFrame cuối cùng. |