簡體   English   中英

Pandas dropna - 存儲刪除的行

[英]Pandas dropna - store dropped rows

我正在使用pandas.DataFrame.dropna方法刪除包含 NaN 的行。 此 function 返回一個 dataframe 排除刪除的行,如文檔中所示。

如何將刪除的行的副本存儲為單獨的 dataframe? 是:

 mydataframe[pd.isnull(['list', 'of', 'columns'])]

總是保證返回與 dropna 刪除的相同的行,假設 dropna 是用subset=['list', 'of', 'columns']調用的?

您可以通過使用一元~ (反轉)運算符對原始 DataFrame 進行索引來執行此操作,以提供 NA 自由 DataFrame 的倒數。

 na_free = df.dropna() only_na = df[~df.index.isin(na_free.index)]

另一種選擇是使用~的 ufunc 實現

 only_na = df[np.invert(df.index.isin(na_free.index))]

從以下數據框開始:

 import pandas as pd import numpy as np df = pd.DataFrame([['a', 'b', np.nan], [np.nan, 'c', 'c'], ['c', 'd', 'a']], columns=['col1', 'col2', 'col3']) df col1 col2 col3 0 ab NaN 1 NaN c c 2 c da

假設我們想在col2col3列中保留帶有 Nans 的行 一種方法如下:這是基於這篇文章的答案

df.loc[pd.isnull(df[['col2', 'col3']]).any(axis=1)] col1 col2 col3 0 ab NaN

因此,如果我們在感興趣的列中刪除帶有 Nans 的行,這將為我們提供將被刪除的行。 為了保留列,我們可以運行相同的代碼,但使用~來反轉選擇

df.loc[~pd.isnull(df[['col2', 'col3']]).any(axis=1)] col1 col2 col3 1 NaN c c 2 c da

這相當於:

 df.dropna(subset=['col2', 'col3'])

我們可以測試:

 df.dropna(subset=['col2', 'col3']).equals(df.loc[~pd.isnull(df[['col2', 'col3']]).any(axis=1)]) True

您當然可以在自己的較大數據幀上對此進行測試,但應該得到相同的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM