[英]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
假設我們想在col2
和col3
列中保留帶有 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.