2015-03-30 37 views
7

Tôi không thể tìm thấy một hàm gấu trúc (mà tôi đã thấy trước đây) để thay thế NaN trong một khung dữ liệu với các giá trị từ một khung dữ liệu khác (giả sử một chỉ mục chung có thể được chỉ định). Bất kỳ giúp đỡ?Pandas điền vào các giá trị bị mất trong dataframe từ một khung dữ liệu khác

+0

Âm thanh Giống như bạn muốn hợp nhất. Vui lòng hiển thị một số trường hợp mẫu. –

+0

tìm thấy nó! Tôi muốn sử dụng connect_first – user308827

+1

http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.combine_first.html – user308827

Trả lời

11

Nếu bạn có hai DataFrames của hình dạng tương tự, sau đó:

df[df.isnull()] = d2 

sẽ làm các trick.

visual representation

Chỉ những nơi df.isnull() đánh giá để True (đánh dấu màu xanh) sẽ đủ điều kiện để chuyển nhượng.

Trong thực tế, Khung dữ liệu không phải lúc nào cũng có cùng kích thước/hình dạng và phương pháp chuyển đổi (đặc biệt là .shift()) rất hữu ích.

Dữ liệu đến vào lúc nào cũng bẩn, không đầy đủ hoặc không nhất quán. Par cho khóa học. Có một con gấu trúc khá rộng rãi tutorial and associated cookbook để xử lý những tình huống này.

5

Như tôi vừa mới học, có một phương pháp DataFrame.combine_first(), mà không chính xác này, với tài sản thêm rằng nếu bạn khung dữ liệu cập nhật d2 lớn hơn của bạn ban đầu df, các hàng và các cột bổ sung được thêm vào, là tốt.

df = df.combine_first(d2) 
3

DataFrame.combine_first() trả lời chính xác câu hỏi này.

Tuy nhiên, đôi khi bạn muốn điền vào/thay thế/ghi đè lên một số giá trị không thiếu (không NaN) của DataFrame A với giá trị từ DataFrame B. Câu hỏi đó đưa tôi đến trang này, và giải pháp là DataFrame.mask()

A = B.mask(condition, A) 

Khi condition là đúng, các giá trị từ A sẽ được sử dụng, nếu không giá trị của B sẽ được sử dụng.

Ví dụ, bạn có thể giải quyết câu hỏi ban đầu của OP với mask như vậy mà khi một phần tử từ A là phi NaN, sử dụng nó, nếu không sử dụng các yếu tố tương ứng từ B.

Nhưng sử dụng DataFrame.mask() bạn có thể thay thế các giá trị của A không đáp ứng các tiêu chí tùy ý (ít hơn 0?) với các giá trị từ B. Vì vậy, mask linh hoạt hơn và quá mức cần thiết cho vấn đề này, nhưng tôi nghĩ nó đáng được đề cập đến (tôi cần nó để giải quyết vấn đề của tôi).

Điều quan trọng cũng cần lưu ý là B có thể là mảng thay vì một DataFrame. DataFrame.combine_first() yêu cầu B là một DataFrame, nhưng DataFrame.mask() chỉ yêu cầu B là NDFrame và kích thước của nó phù hợp với thứ nguyên của A.

Các vấn đề liên quan