Pandas là một công cụ đặc biệt cho phép chúng tôi thực hiện các thao tác dữ liệu phức tạp một cách hiệu quả và hiệu quả. Bên trong gấu trúc, chúng tôi chủ yếu xử lý tập dữ liệu ở dạng DataFrame. DataFrames là cấu trúc dữ liệu 2 chiều trong gấu trúc. DataFrames bao gồm các hàng, cột và dữ liệu
Làm cách nào để hợp nhất danh sách các khung dữ liệu thành một khung dữ liệu?
Chúng tôi được cung cấp một danh sách các Khung dữ liệu và chúng tôi cần thực hiện một thao tác sao cho tất cả các Khung dữ liệu được hợp nhất với nhau và dẫn đến một Khung dữ liệu duy nhất
Với mục đích này, trước tiên chúng tôi sẽ tạo nhiều DataFrames với một cột chung, sau đó chúng tôi sẽ hợp nhất chúng bằng DataFrame. phương pháp hợp nhất []
Giả sử chúng ta có hai danh sách, một trong số chúng thuộc loại chuỗi và danh sách còn lại thuộc loại int. Chúng tôi muốn tạo một khung dữ liệu với các danh sách này dưới dạng cột
>months = ['Jan','Apr','Mar','June'] >days = [31,30,31,30]
Chúng ta sẽ thấy ba cách để lấy khung dữ liệu từ danh sách
1. Tạo khung dữ liệu gấu trúc từ danh sách bằng từ điển
Một cách tiếp cận để tạo khung dữ liệu gấu trúc từ một hoặc nhiều danh sách là tạo từ điển trước. Hãy để chúng tôi tạo một từ điển với hai danh sách sao cho tên là khóa và danh sách là giá trị
>d = {'Month':months,'Day':days} >d {'Day': [31, 30, 31, 30], 'Month': ['Jan', 'Apr', 'Mar', 'June']}
Đây d là từ điển của chúng tôi với các tên “Ngày” và “Tháng” làm khóa
# Load pandas as pd >import pandas as pd
Hãy để chúng tôi tạo một khung dữ liệu gấu trúc từ việc sử dụng pd. Chức năng DataFrame với từ điển của chúng tôi làm đầu vào
>df = pd.DataFrame[d] >df Day Month 0 31 Jan 1 30 Apr 2 31 Mar 3 30 June
Bây giờ chúng tôi có khung dữ liệu gấu trúc của chúng tôi từ danh sách. Lưu ý rằng các cột của khung dữ liệu là Ngày đầu tiên và Tháng tiếp theo. Giả sử chúng tôi muốn Tháng đầu tiên và Ngày tiếp theo trong khung dữ liệu. Để chỉ định thứ tự của các cột, chúng ta có thể sử dụng tùy chọn “cột” với pd. Khung dữ liệu như
>df = pd.DataFrame[d, columns=['Month','Day']] >df Month Day 0 Jan 31 1 Apr 30 2 Mar 31 3 June 30
2. Tạo khung dữ liệu gấu trúc từ danh sách bằng zip
Cách thứ hai để tạo khung dữ liệu gấu trúc từ danh sách là sử dụng chức năng zip. Trước tiên, chúng tôi có thể sử dụng hàm zip để hợp nhất hai danh sách này. Trong Python 3, hàm zip tạo một đối tượng zip, là một trình tạo và chúng ta có thể sử dụng nó để tạo từng mục một. Để lấy danh sách các bộ dữ liệu, chúng ta có thể sử dụng list[] và tạo danh sách các bộ dữ liệu. Đối với ví dụ này, chúng ta có thể tạo một danh sách các bộ dữ liệu như
# Python 3 to get list of tuples from two lists data_tuples = list[zip[Month,Days]] data_tuples [['Jan', 31], ['Apr', 30], ['Mar', 31], ['June', 30]]
Lưu ý rằng nếu bạn sử dụng Python 2, chỉ riêng zip[Month,Days] là đủ để lấy danh sách các bộ dữ liệu. Chúng ta không cần sử dụng list[zip[]]
Chuyển đổi danh sách các bộ dữ liệu thành pandas dataframe
Chúng ta chỉ có thể sử dụng pd. DataFrame trên danh sách các bộ dữ liệu này để lấy khung dữ liệu gấu trúc. Và chúng tôi cũng có thể chỉ định tên cột với danh sách các bộ dữ liệu
>pd.DataFrame[data_tuples, columns=['Month','Day']] Month Day 0 Jan 31 1 Apr 30 2 Mar 31 3 June 30
3. Tạo khung dữ liệu gấu trúc từ đầu
Cách thứ ba để tạo một khung dữ liệu gấu trúc từ nhiều danh sách là bắt đầu từ đầu và thêm các cột theo cách thủ công. Trước tiên, chúng tôi sẽ tạo một khung dữ liệu gấu trúc trống và sau đó thêm các cột vào đó
gấu trúc cung cấp nhiều phương tiện khác nhau để dễ dàng kết hợp Sê-ri hoặc Khung dữ liệu với nhiều loại logic thiết lập khác nhau cho các chỉ mục và chức năng đại số quan hệ trong trường hợp hoạt động kiểu nối/hợp nhất
Ngoài ra pandas còn cung cấp tiện ích so sánh 2 Series hoặc DataFrame và tóm tắt sự khác biệt của chúng
nối các đối tượng
Hàm [trong không gian tên gấu trúc chính] thực hiện tất cả các công việc nặng nhọc khi thực hiện các thao tác nối dọc theo một trục trong khi thực hiện logic thiết lập tùy chọn [liên kết hoặc giao nhau] của các chỉ mục [nếu có] trên các trục khác. Lưu ý rằng tôi nói “nếu có” bởi vì chỉ có một trục nối duy nhất có thể có cho Sê-ri
Trước khi đi sâu vào tất cả các chi tiết của
20 và những gì nó có thể làm, đây là một ví dụ đơn giản
________số 8_______
Giống như chức năng anh chị em của nó trên ndarrays,
21,
22 lấy một danh sách hoặc lệnh của các đối tượng được nhập đồng nhất và nối chúng với một số cách xử lý có thể định cấu hình “phải làm gì với các trục khác”
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]
Không có một chút ngữ cảnh, nhiều lập luận trong số này không có nhiều ý nghĩa. Hãy xem lại ví dụ trên. Giả sử chúng tôi muốn liên kết các khóa cụ thể với từng phần của DataFrame được chia nhỏ. Chúng ta có thể làm điều này bằng cách sử dụng đối số
24
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]
Như bạn có thể thấy [nếu bạn đã đọc phần còn lại của tài liệu], chỉ mục của đối tượng kết quả có một. Điều này có nghĩa là bây giờ chúng ta có thể chọn ra từng đoạn theo khóa
In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D7
Không khó để thấy điều này có thể rất hữu ích như thế nào. Chi tiết hơn về chức năng này dưới đây
Ghi chú
Điều đáng chú ý là tạo một bản sao đầy đủ của dữ liệu và việc liên tục sử dụng lại chức năng này có thể tạo ra hiệu suất đáng kể. Nếu bạn cần sử dụng thao tác trên một số bộ dữ liệu, hãy sử dụng cách hiểu danh sách
frames = [ process_your_file[f] for f in files ] result = pd.concat[frames]
Ghi chú
Khi nối các Khung dữ liệu với các trục được đặt tên, gấu trúc sẽ cố gắng giữ nguyên các tên chỉ mục/cột này bất cứ khi nào có thể. Trong trường hợp tất cả các yếu tố đầu vào chia sẻ một tên chung, tên này sẽ được gán cho kết quả. Khi các tên đầu vào không đồng ý, kết quả sẽ không được đặt tên. Điều này cũng đúng với , nhưng logic được áp dụng riêng trên cơ sở từng cấp độ
Đặt logic trên các trục khác
Khi dán nhiều DataFrame lại với nhau, bạn có thể lựa chọn cách xử lý các trục khác [không phải là trục được nối]. Điều này có thể được thực hiện theo hai cách sau
Hãy hợp nhất tất cả,
Đến ngã tư,
Dưới đây là một ví dụ về từng phương pháp này. Đầu tiên, hành vi
36 mặc định
In [8]: df4 = pd.DataFrame[ ...: { ...: "B": ["B2", "B3", "B6", "B7"], ...: "D": ["D2", "D3", "D6", "D7"], ...: "F": ["F2", "F3", "F6", "F7"], ...: }, ...: index=[2, 3, 6, 7], ...: ] ...: In [9]: result = pd.concat[[df1, df4], axis=1]
Đây là điều tương tự với
37
In [10]: result = pd.concat[[df1, df4], axis=1, join="inner"]
Cuối cùng, giả sử chúng tôi chỉ muốn sử dụng lại chỉ mục chính xác từ DataFrame ban đầu
1
Tương tự, chúng ta có thể lập chỉ mục trước khi nối
2
Bỏ qua các chỉ mục trên trục nối
Đối với các đối tượng
40 không có chỉ mục có ý nghĩa, bạn có thể nối thêm chúng và bỏ qua thực tế là chúng có thể có các chỉ mục chồng chéo. Để làm điều này, hãy sử dụng đối số
27
4
Kết nối với ndims hỗn hợp
Bạn có thể nối kết hợp các đối tượng
42 và
40.
42 sẽ được chuyển đổi thành
40 với tên cột là tên của
42
6
Ghi chú
Vì chúng tôi đang nối một
42 với một
40, nên chúng tôi có thể đạt được kết quả tương tự với. Để nối một số lượng đối tượng gấu trúc tùy ý [
40 hoặc
42], hãy sử dụng
20
Nếu ______________42 không tên được thông qua, chúng sẽ được đánh số liên tiếp
8
Vượt qua
54 sẽ loại bỏ tất cả các tham chiếu tên
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]0
Kết nối nhiều hơn với các phím nhóm
Một cách sử dụng khá phổ biến của đối số
24 là ghi đè tên cột khi tạo một
40 mới dựa trên
42 hiện có. Lưu ý cách hành vi mặc định bao gồm việc cho phép kết quả
40 kế thừa tên của cha mẹ
42, khi chúng tồn tại
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]2
Thông qua đối số
24, chúng ta có thể ghi đè các tên cột hiện có
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]3
Hãy xem xét một biến thể của ví dụ đầu tiên được trình bày
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]4
Bạn cũng có thể chuyển một lệnh tới
20 trong trường hợp đó, các phím chính tả sẽ được sử dụng cho đối số
24 [trừ khi các phím khác được chỉ định]
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]6
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]8
MultiIndex được tạo có các mức được xây dựng từ các khóa đã chuyển và chỉ mục của ______________40 phần
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]0
Nếu bạn muốn chỉ định các cấp độ khác [đôi khi sẽ xảy ra trường hợp này], bạn có thể làm như vậy bằng cách sử dụng đối số
29
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]1
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]3
Điều này khá bí truyền, nhưng nó thực sự cần thiết để triển khai những thứ như GroupBy trong đó thứ tự của một biến phân loại có ý nghĩa
Nối các hàng vào DataFrame
Nếu bạn có một chuỗi mà bạn muốn nối dưới dạng một hàng vào một
40, bạn có thể chuyển đổi hàng đó thành một
40 và sử dụng
20
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]4
Bạn nên sử dụng
27 với phương pháp này để hướng dẫn DataFrame loại bỏ chỉ mục của nó. Nếu bạn muốn duy trì chỉ mục, bạn nên xây dựng một DataFrame được lập chỉ mục phù hợp và nối thêm hoặc nối các đối tượng đó
DataFrame kiểu cơ sở dữ liệu hoặc nối/hợp nhất sê-ri có tên
pandas có các hoạt động nối trong bộ nhớ đầy đủ tính năng, hiệu suất cao rất giống với các cơ sở dữ liệu quan hệ như SQL. Các phương pháp này hoạt động tốt hơn đáng kể [trong một số trường hợp tốt hơn nhiều so với mức độ lớn] so với các triển khai nguồn mở khác [như
69 trong R]. Lý do cho điều này là do thiết kế thuật toán cẩn thận và bố cục bên trong của dữ liệu trong
40
Xem một số chiến lược nâng cao
Người dùng quen thuộc với SQL nhưng mới sử dụng pandas có thể quan tâm đến
pandas cung cấp một chức năng duy nhất, , làm điểm vào cho tất cả các thao tác nối cơ sở dữ liệu tiêu chuẩn giữa các đối tượng
40 hoặc tên là
42
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]6
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]
00. Thêm một cột vào DataFrame đầu ra có tên làpd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]
01 với thông tin về nguồn của mỗi hàng.pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]
01 là loại Phân loại và nhận giá trị làpd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]
03 đối với các quan sát có khóa hợp nhất chỉ xuất hiện trongpd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]
05 đối với các quan sát có khóa hợp nhất chỉ xuất hiện trongpd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]
07 nếu khóa hợp nhất của quan sát được tìm thấy trong cả haipd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]
08. chuỗi, mặc định Không có. Nếu được chỉ định, kiểm tra xem hợp nhất có thuộc loại được chỉ định không“one_to_one” hoặc “1. 1”. kiểm tra xem các khóa hợp nhất có phải là duy nhất trong cả bộ dữ liệu bên trái và bên phải không
“one_to_many” hoặc “1. m”. kiểm tra xem các khóa hợp nhất có phải là duy nhất trong tập dữ liệu bên trái không
“many_to_one” hoặc “m. 1”. kiểm tra xem các khóa hợp nhất có phải là duy nhất trong tập dữ liệu bên phải không
“many_to_many” hoặc “m. m”. được phép, nhưng không dẫn đến kiểm tra
Ghi chú
Hỗ trợ chỉ định các mức chỉ số như các tham số
76,
80 và
81 đã được thêm vào trong phiên bản 0. 23. 0. Hỗ trợ hợp nhất các đối tượng có tên
42 đã được thêm vào trong phiên bản 0. 24. 0
Kiểu trả về sẽ giống như
74. Nếu
74 là một
40 hoặc có tên là
42 và
75 là một phân lớp của
40, kiểu trả về vẫn sẽ là
40
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]20 là một hàm trong không gian tên pandas và nó cũng có sẵn dưới dạng phương thức đối tượng
40 , với cách gọi ________________40 được coi là đối tượng bên trái trong liên kết
Phương thức liên quan, sử dụng nội bộ ____________20 cho liên kết chỉ mục trên chỉ mục [theo mặc định] và [các] cột trên chỉ mục. Nếu bạn chỉ tham gia theo chỉ mục, bạn có thể sử dụng
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]26 để đỡ phải gõ
Sơ lược về các phương pháp hợp nhất [đại số quan hệ]
Người dùng có kinh nghiệm về cơ sở dữ liệu quan hệ như SQL sẽ quen thuộc với thuật ngữ được sử dụng để mô tả các hoạt động nối giữa hai cấu trúc giống bảng SQL [_______7_______40 đối tượng]. Có một số trường hợp cần xem xét rất quan trọng để hiểu
tham gia một đối một. ví dụ: khi nối hai đối tượng
liên kết nhiều-một. ví dụ: khi nối một chỉ mục [duy nhất] với một hoặc nhiều cột trong một
liên kết nhiều-nhiều. nối cột trên cột
Ghi chú
Khi nối các cột trên các cột [có thể là nối nhiều-nhiều], mọi chỉ mục trên các đối tượng
40 đã truyền sẽ bị loại bỏ
Rất đáng để dành thời gian tìm hiểu kết quả của trường hợp tham gia nhiều-nhiều. Trong SQL/đại số quan hệ tiêu chuẩn, nếu tổ hợp phím xuất hiện nhiều lần trong cả hai bảng, bảng kết quả sẽ có tích Đề các của dữ liệu được liên kết. Đây là một ví dụ rất cơ bản với một tổ hợp phím duy nhất
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]7
Đây là một ví dụ phức tạp hơn với nhiều phím tham gia. Chỉ các khóa xuất hiện trong
74 và
75 mới có mặt [giao điểm], kể từ
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]33 theo mặc định
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]9
Đối số
86 của
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]20 chỉ định cách xác định khóa nào sẽ được đưa vào bảng kết quả. Nếu tổ hợp phím không xuất hiện trong bảng bên trái hoặc bên phải, các giá trị trong bảng đã tham gia sẽ là
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]36. Dưới đây là tóm tắt về các tùy chọn
86 và tên tương đương SQL của chúng
phương pháp hợp nhất
Tên tham gia SQL
Sự miêu tả
74
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]39
Chỉ sử dụng các phím từ khung bên trái
75
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]41
Chỉ sử dụng các phím từ khung bên phải
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]42
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]43
Sử dụng liên kết các phím từ cả hai khung
92
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]45
Sử dụng giao điểm của các phím từ cả hai khung
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]46
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]47
Tạo sản phẩm cartesian của các hàng của cả hai khung
1
3
5
7
9
Bạn có thể hợp nhất Sê-ri nhiều chỉ mục và Khung dữ liệu, nếu tên của Đa chỉ mục tương ứng với các cột từ Khung dữ liệu. Chuyển đổi Sê-ri thành Khung dữ liệu bằng cách sử dụng trước khi hợp nhất, như minh họa trong ví dụ sau
In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D71
Đây là một ví dụ khác với các khóa tham gia trùng lặp trong DataFrames
In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D72
Cảnh báo
Tham gia/hợp nhất trên các phím trùng lặp có thể gây ra khung trả về là phép nhân của kích thước hàng, điều này có thể dẫn đến tràn bộ nhớ. Người dùng có trách nhiệm quản lý các giá trị trùng lặp trong các khóa trước khi tham gia các Khung dữ liệu lớn
Kiểm tra các khóa trùng lặp
Người dùng có thể sử dụng đối số
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]08 để tự động kiểm tra xem có trùng lặp không mong muốn trong các khóa hợp nhất của họ hay không. Tính duy nhất của khóa được kiểm tra trước các hoạt động hợp nhất và do đó sẽ bảo vệ chống tràn bộ nhớ. Kiểm tra tính duy nhất của khóa cũng là một cách hay để đảm bảo cấu trúc dữ liệu người dùng như mong đợi
Trong ví dụ sau, có các giá trị trùng lặp của
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]50 ở bên phải
40. Vì đây không phải là hợp nhất một đối một – như được chỉ định trong đối số
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]08 – một ngoại lệ sẽ được đưa ra
In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D74
In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D75
Nếu người dùng biết về các bản sao ở bên phải
40 nhưng muốn đảm bảo không có bản sao nào trong DataFrame bên trái, thì người dùng có thể sử dụng đối số
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]54 để thay thế, điều này sẽ không gây ra ngoại lệ
In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D76
Chỉ số hợp nhất
chấp nhận đối số
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]00. Nếu
83, một cột kiểu Phân loại có tên là
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]01 sẽ được thêm vào đối tượng đầu ra nhận các giá trị
Nguồn gốc quan sát
Giá trị
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]01Chỉ hợp nhất khóa trong khung
87pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]03Chỉ hợp nhất khóa trong khung
88pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]05Hợp nhất phím trong cả hai khung
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]07
In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D77
Đối số
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]00 cũng sẽ chấp nhận các đối số chuỗi, trong trường hợp đó, hàm chỉ báo sẽ sử dụng giá trị của chuỗi đã truyền làm tên cho cột chỉ báo
In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D78
Hợp nhất các loại
Hợp nhất sẽ bảo toàn dtype của các phím tham gia
In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D79
Chúng tôi có thể bảo tồn các khóa tham gia
frames = [ process_your_file[f] for f in files ] result = pd.concat[frames]0
Tất nhiên, nếu bạn thiếu các giá trị được giới thiệu, thì dtype kết quả sẽ được cập nhật
frames = [ process_your_file[f] for f in files ] result = pd.concat[frames]1
Việc hợp nhất sẽ bảo tồn
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]66 dtypes của việc hợp nhất. Xem thêm phần về
khung bên trái
frames = [ process_your_file[f] for f in files ] result = pd.concat[frames]2
khung bên phải
frames = [ process_your_file[f] for f in files ] result = pd.concat[frames]3
Kết quả hợp nhất
frames = [ process_your_file[f] for f in files ] result = pd.concat[frames]4
Ghi chú
Các loại danh mục phải hoàn toàn giống nhau, nghĩa là cùng danh mục và thuộc tính được sắp xếp. Nếu không, kết quả sẽ ép buộc vào dtype của danh mục
Ghi chú
Hợp nhất trên
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]66 dtypes giống nhau có thể khá hiệu quả so với hợp nhất
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]68 dtype
Tham gia vào chỉ mục
là một phương pháp thuận tiện để kết hợp các cột của hai
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]70 có khả năng được lập chỉ mục khác nhau thành một kết quả duy nhất
40. Đây là một ví dụ rất cơ bản
frames = [ process_your_file[f] for f in files ] result = pd.concat[frames]5
frames = [ process_your_file[f] for f in files ] result = pd.concat[frames]7
Tương tự như trên, nhưng với
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]33
frames = [ process_your_file[f] for f in files ] result = pd.concat[frames]9
Căn chỉnh dữ liệu ở đây là trên các chỉ mục [nhãn hàng]. Hành vi tương tự này có thể đạt được bằng cách sử dụng
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]20 cùng với các đối số bổ sung hướng dẫn nó sử dụng các chỉ mục
In [8]: df4 = pd.DataFrame[ ...: { ...: "B": ["B2", "B3", "B6", "B7"], ...: "D": ["D2", "D3", "D6", "D7"], ...: "F": ["F2", "F3", "F6", "F7"], ...: }, ...: index=[2, 3, 6, 7], ...: ] ...: In [9]: result = pd.concat[[df1, df4], axis=1]1
In [8]: df4 = pd.DataFrame[ ...: { ...: "B": ["B2", "B3", "B6", "B7"], ...: "D": ["D2", "D3", "D6", "D7"], ...: "F": ["F2", "F3", "F6", "F7"], ...: }, ...: index=[2, 3, 6, 7], ...: ] ...: In [9]: result = pd.concat[[df1, df4], axis=1]3
Tham gia các cột chính trên một chỉ mục
lấy một đối số
76 tùy chọn có thể là một cột hoặc nhiều tên cột, xác định rằng
40 đã qua sẽ được căn chỉnh trên cột đó trong
40. Hai lệnh gọi hàm này hoàn toàn tương đương
In [8]: df4 = pd.DataFrame[ ...: { ...: "B": ["B2", "B3", "B6", "B7"], ...: "D": ["D2", "D3", "D6", "D7"], ...: "F": ["F2", "F3", "F6", "F7"], ...: }, ...: index=[2, 3, 6, 7], ...: ] ...: In [9]: result = pd.concat[[df1, df4], axis=1]5
Rõ ràng bạn có thể chọn bất kỳ hình thức nào bạn thấy thuận tiện hơn. Đối với các phép nối nhiều-một [trong đó một trong số các
40 đã được lập chỉ mục bởi khóa nối], sử dụng
26 có thể thuận tiện hơn. Đây là một ví dụ đơn giản
In [8]: df4 = pd.DataFrame[ ...: { ...: "B": ["B2", "B3", "B6", "B7"], ...: "D": ["D2", "D3", "D6", "D7"], ...: "F": ["F2", "F3", "F6", "F7"], ...: }, ...: index=[2, 3, 6, 7], ...: ] ...: In [9]: result = pd.concat[[df1, df4], axis=1]6
In [8]: df4 = pd.DataFrame[ ...: { ...: "B": ["B2", "B3", "B6", "B7"], ...: "D": ["D2", "D3", "D6", "D7"], ...: "F": ["F2", "F3", "F6", "F7"], ...: }, ...: index=[2, 3, 6, 7], ...: ] ...: In [9]: result = pd.concat[[df1, df4], axis=1]8
Để tham gia trên nhiều khóa, Khung dữ liệu được thông qua phải có một
35
0
Bây giờ điều này có thể được nối bằng cách chuyển hai tên cột chính
1
Giá trị mặc định cho
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]26 là thực hiện nối trái [về cơ bản là thao tác “VLOOKUP”, dành cho người dùng Excel], thao tác này chỉ sử dụng các khóa được tìm thấy trong DataFrame đang gọi. Các kiểu nối khác, ví dụ như nối bên trong, có thể được thực hiện dễ dàng
3
Như bạn có thể thấy, thao tác này loại bỏ bất kỳ hàng nào không khớp
Tham gia một Chỉ mục duy nhất vào Đa chỉ mục
Bạn có thể tham gia một
40 được lập chỉ mục đơn lẻ với cấp độ của một
40 được lập chỉ mục nhiều lần. Cấp độ sẽ khớp với tên của chỉ mục của khung được lập chỉ mục đơn lẻ so với tên cấp độ của khung MultiIndexed
5
Điều này tương đương nhưng ít dài dòng hơn và bộ nhớ hiệu quả hơn/nhanh hơn điều này
7
Tham gia với hai MultiIndexes
Điều này được hỗ trợ theo một cách hạn chế, với điều kiện là chỉ mục cho đối số bên phải được sử dụng hoàn toàn trong liên kết và là tập hợp con của các chỉ mục trong đối số bên trái, như trong ví dụ này
9
Nếu điều kiện đó không được thỏa mãn, có thể thực hiện phép nối với hai đa chỉ mục bằng cách sử dụng đoạn mã sau
In [10]: result = pd.concat[[df1, df4], axis=1, join="inner"]0
Hợp nhất trên sự kết hợp của các cột và cấp độ chỉ mục
Các chuỗi được truyền dưới dạng tham số
76,
80 và
81 có thể đề cập đến tên cột hoặc tên cấp chỉ mục. Điều này cho phép hợp nhất các phiên bản
40 trên tổ hợp các cấp chỉ mục và cột mà không cần đặt lại chỉ mục
In [10]: result = pd.concat[[df1, df4], axis=1, join="inner"]2
Ghi chú
Khi DataFrames được hợp nhất trên một chuỗi khớp với cấp chỉ mục trong cả hai khung, cấp chỉ mục được giữ nguyên dưới dạng cấp chỉ mục trong DataFrame kết quả
Ghi chú
Khi các Khung dữ liệu được hợp nhất chỉ bằng một số cấp độ của
35, các cấp độ bổ sung sẽ bị loại bỏ khỏi kết quả hợp nhất. Để duy trì các mức đó, hãy sử dụng
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]89 trên các tên mức đó để di chuyển các mức đó sang các cột trước khi thực hiện hợp nhất
Ghi chú
Nếu một chuỗi khớp với cả tên cột và tên cấp chỉ mục, thì cảnh báo sẽ được đưa ra và cột đó được ưu tiên. Điều này sẽ dẫn đến lỗi mơ hồ trong phiên bản tương lai
Cột giá trị chồng lấp
Đối số hợp nhất
96 lấy một bộ danh sách các chuỗi để nối vào các tên cột chồng chéo trong các đầu vào
40 để phân biệt các cột kết quả
In [10]: result = pd.concat[[df1, df4], axis=1, join="inner"]4
In [10]: result = pd.concat[[df1, df4], axis=1, join="inner"]6
có các đối số
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]93 và
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]94 hoạt động tương tự
In [10]: result = pd.concat[[df1, df4], axis=1, join="inner"]8
Tham gia nhiều DataFrames
Một danh sách hoặc bộ của
pd.concat[ objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, ]70 cũng có thể được chuyển đến để nối chúng lại với nhau trên các chỉ mục của chúng
00
Hợp nhất các giá trị với nhau trong các cột Sê-ri hoặc Khung dữ liệu
Một tình huống khá phổ biến khác là có hai đối tượng
42 hoặc
40 được lập chỉ mục giống nhau [hoặc được lập chỉ mục tương tự] và muốn “chắp vá” các giá trị trong một đối tượng từ các giá trị để khớp chỉ mục trong đối tượng kia. Đây là một ví dụ
02
Đối với điều này, sử dụng phương pháp
03
Lưu ý rằng phương pháp này chỉ lấy các giá trị từ bên phải
40 nếu chúng bị thiếu ở bên trái
40. Một phương thức liên quan, , thay đổi các giá trị không phải NA tại chỗ
05
Hợp nhất thân thiện với thời gian
Hợp nhất dữ liệu có thứ tự
Một chức năng cho phép kết hợp chuỗi thời gian và dữ liệu được sắp xếp khác. Cụ thể, nó có một từ khóa
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]04 tùy chọn để điền/nội suy dữ liệu còn thiếu
07
sáp nhập
A tương tự như phép nối trái có thứ tự ngoại trừ việc chúng tôi khớp với khóa gần nhất thay vì các khóa bằng nhau. Đối với mỗi hàng trong
74
40, chúng tôi chọn hàng cuối cùng trong
75
40 có phím
76 nhỏ hơn phím bên trái. Cả hai DataFrames phải được sắp xếp theo khóa
Tùy chọn hợp nhất asof có thể thực hiện hợp nhất theo nhóm. Điều này khớp với khóa
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]11 như nhau, ngoài ra khớp gần nhất trên khóa
76
Ví dụ;
08
09
Theo mặc định, chúng tôi đang sử dụng dấu ngoặc kép
10
Chúng tôi chỉ tính trong vòng
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]16 giữa thời điểm báo giá và thời điểm giao dịch
11
Chúng tôi chỉ tính trong khoảng thời gian
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]17 giữa thời điểm báo giá và thời gian giao dịch và chúng tôi loại trừ các trận đấu chính xác đúng thời điểm. Lưu ý rằng mặc dù chúng tôi loại trừ các đối sánh chính xác [của các trích dẫn], nhưng các trích dẫn trước đó sẽ lan truyền đến thời điểm đó
12
So sánh đối tượng
Các phương thức và cho phép bạn so sánh hai DataFrame hoặc Sê-ri tương ứng và tóm tắt sự khác biệt của chúng
Tính năng này đã được thêm vào trong
Ví dụ: bạn có thể muốn so sánh hai
40 và xếp các điểm khác biệt của chúng cạnh nhau
13
14
15
Theo mặc định, nếu hai giá trị tương ứng bằng nhau, chúng sẽ được hiển thị là
In [6]: result = pd.concat[frames, keys=["x", "y", "z"]]21. Hơn nữa, nếu tất cả các giá trị trong toàn bộ một hàng/cột, thì hàng/cột đó sẽ bị loại khỏi kết quả. Sự khác biệt còn lại sẽ được căn chỉnh trên các cột