Làm cách nào để kết hợp hai khung dữ liệu?


105

Tôi đang sử dụng khung dữ liệu Pandas. Tôi có một khung dữ liệu ban đầu, chẳng hạn D. Tôi trích xuất hai khung dữ liệu từ nó như thế này:

A = D[D.label == k]
B = D[D.label != k]

sau đó tôi thay đổi nhãn trong AB

A.label = 1
B.label = -1

Tôi muốn kết hợp A và B để có thể có chúng dưới dạng một khung dữ liệu, giống như hoạt động liên hợp. Thứ tự của dữ liệu không quan trọng. Tuy nhiên, khi chúng tôi lấy mẫu A và B từ D, chúng vẫn giữ lại các chỉ mục của chúng từ D.

Câu trả lời:


148

Tôi tin rằng bạn có thể sử dụng appendphương pháp

bigdata = data1.append(data2, ignore_index=True)

để giữ các chỉ mục của họ, chỉ cần không sử dụng ignore_indextừ khóa ...


1
Những công việc này. Nó tạo ra một DataFrame mới. Có cách nào để làm điều đó nội tuyến không? Điều đó sẽ rất tuyệt khi tôi đang tải một lượng lớn dữ liệu từ cơ sở dữ liệu theo lô để tôi có thể cập nhật DataFrame lặp đi lặp lại mà không cần tạo bản sao mỗi lần.
Andrew

1
Vâng, đó là có thể, xem: stackoverflow.com/a/46661368/5717580
martin-martin

91

Bạn cũng có thể sử dụng pd.concat, điều này đặc biệt hữu ích khi bạn đang kết hợp nhiều hơn hai khung dữ liệu:

bigdata = pd.concat([data1, data2], ignore_index=True, sort=False)

Tôi muốn sử dụng này, nhưng tôi đang cố gắng để nối hai cột của cùng một tên o_O
lifelonglearner

45

Tôi nghĩ thêm điều này ở đây trong trường hợp ai đó thấy nó hữu ích. @ostrokach đã đề cập đến cách bạn có thể hợp nhất các khung dữ liệu trên các hàng

df_row_merged = pd.concat([df_a, df_b], ignore_index=True)

Để hợp nhất các cột, bạn có thể sử dụng cú pháp sau:

df_col_merged = pd.concat([df_a, df_b], axis=1)

14

Có một giải pháp khác cho trường hợp bạn đang làm việc với dữ liệu lớn và cần nối nhiều tập dữ liệu. concatcó thể nâng cao hiệu suất, vì vậy nếu bạn không muốn tạo df mới mỗi lần, thay vào đó bạn có thể sử dụng cách hiểu danh sách :

frames = [ process_file(f) for f in dataset_files ]
result = pd.append(frames)

(như được chỉ ra ở đây trong tài liệu ở cuối phần):

Lưu ý : Tuy nhiên, cần lưu ý rằng concat(và do đó append) 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 một lần truy cập hiệu suất đáng kể. Nếu bạn cần sử dụng thao tác trên một số tập dữ liệu, hãy sử dụng cách hiểu danh sách.


2

Nếu bạn muốn cập nhật / thay thế các giá trị của khung dữ liệu đầu tiên df1bằng các giá trị của khung dữ liệu thứ hai df2. bạn có thể làm điều đó theo các bước sau -

Bước 1: Đặt chỉ mục của khung dữ liệu đầu tiên (df1)

df1.set_index('id')

Bước 2: Đặt chỉ mục của khung dữ liệu thứ hai (df2)

df2.set_index('id')

và cuối cùng cập nhật khung dữ liệu bằng đoạn mã sau:

df1.update(df2)

0

Dữ liệu đầu tiên

train.shape

kết quả:-

(31962, 3)

Dữ liệu thứ 2

test.shape

kết quả:-

(17197, 2)

Phối hợp

new_data=train.append(test,ignore_index=True)

Kiểm tra

new_data.shape

kết quả:-

(49159, 3)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.