简体   繁体   中英

Remove NaN values from Pandas DataFrame

I have a sample DataFrame similar to the one below

            a            b           c
4   58.254690  2475.247525  131.665569
6  -58.709564 -2597.402597 -143.492610
7         NaN  2314.814815  145.539223
8  -60.786578 -2032.520325 -154.822728
9  -57.780089 -2283.105023 -140.646976

Is it possible to remove only the NaN values or move it to the bottom of the DataFrame like the following one?

            a            b           c
4   58.254690  2475.247525  131.665569
6  -58.709564 -2597.402597 -143.492610
7  -60.786578  2314.814815  145.539223
8  -57.780089 -2032.520325 -154.822728
9         NaN -2283.105023 -140.646976

Use justify function:

df = pd.DataFrame(justify(df.to_numpy(), invalid_val=np.nan, axis=0, side='up'), 
                  columns=df.columns)
print (df)
           a            b           c
0  58.254690  2475.247525  131.665569
1 -58.709564 -2597.402597 -143.492610
2 -60.786578  2314.814815  145.539223
3 -57.780089 -2032.520325 -154.822728
4        NaN -2283.105023 -140.646970

Or use Series.sort_values per columns with key parameter:

df = df.apply(lambda x: x.sort_values(key = lambda x: x.isna()).tolist())
print (df)

           a            b           c
4  58.254690  2475.247525  131.665569
6 -58.709564 -2597.402597 -143.492610
7 -60.786578  2314.814815  145.539223
8 -57.780089 -2032.520325 -154.822728
9        NaN -2283.105023 -140.646970

remove only (replace):

some_value = 'ItWasNA'

df.fillna(some_value, inplace=True)

move:

for col in df.columns:
    df[col] = df[col].dropna().reset_index(drop=True)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM