Home > Blockchain >  How to mask or completely remove Nan values across rows and columns
How to mask or completely remove Nan values across rows and columns

Time:03-10

As I am struggling around this, how to strip/mask or remove all Nan values completely across DataFrame so as to see only required values under each column name.

Dataframe:

df = pd.read_csv("linux_server.csv", usecols=['name', 'managed_by'])
df = df.pivot(columns='managed_by', values='name').rename(columns={np.nan: 'Unknown'})
df.columns = df.columns.str.extract('(.*) ')[0]
df = df.rename(columns={np.nan: 'Unknown'})
print(df)

output:

         Unknown   Audrey Banu Prathap Reddy          Carlton          Eric    Reiner          Krishna  Wilbert      Wim
             NaN      NaN            tdi0960              NaN           NaN       NaN             NaN      NaN      NaN
             NaN      NaN            tdi0963              NaN           NaN       NaN             NaN      NaN      NaN
             NaN      NaN            tdi0966              NaN           NaN       NaN             NaN      NaN      NaN
             NaN  tdi2513                NaN              NaN           NaN       NaN             NaN      NaN      NaN
             NaN      NaN            tdi0765              NaN           NaN       NaN             NaN      NaN      NaN
             NaN      NaN            tdi0969              NaN           NaN       NaN         tdi2479      NaN      NaN
             NaN      NaN            tdi0970              NaN           NaN       NaN             NaN      NaN      NaN
             NaN      NaN            tdi2431              NaN           NaN       NaN             NaN      NaN      NaN
             NaN      NaN                NaN              NaN           NaN   tdi0424             NaN      NaN      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN  tdi2459      NaN
             NaN      NaN                NaN              NaN           NaN   tdi0425             NaN      NaN      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN  tdi2460      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN  tdi2461      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN  tdi2462      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN  tdi2463      NaN
             NaN      NaN                NaN          tdi2546           NaN       NaN             NaN      NaN      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN  tdi2464      NaN
             NaN      NaN                NaN              NaN           NaN   tdi0426             NaN      NaN      NaN
             NaN      NaN                NaN              NaN           NaN   tdi1874             NaN      NaN      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN  tdi2465      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN  tdi2466      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN  tdi2467      NaN
 tsnpt01labt004v      NaN                NaN              NaN           NaN       NaN             NaN      NaN      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN  tdi2468      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN      NaN  tdi2263
 tsnpt01labt005v      NaN                NaN              NaN           NaN       NaN             NaN      NaN      NaN
             NaN      NaN                NaN              NaN           NaN       NaN             NaN      NaN  tdi2264
         tdi0897      NaN                NaN              NaN           NaN       NaN             NaN      NaN      NaN
 tsnpt01labt003v      NaN                NaN              NaN           NaN       NaN             NaN      NaN      NaN
             NaN      NaN                NaN              NaN    vms-wan-cs       NaN             NaN      NaN      NaN

Required:

Output without Nan or empty cells.

Below is just sample for three columns as desired

  Unknown               Audrey          Banu Prathap Reddy 
 tsnpt01labt004v        tdi2513         tdi0960               
 tsnpt01labt005v                        tdi0963              
 tdi0897                                tdi0966              
 tsnpt01labt003v                        tdi0765                 
                                        tdi0969              
                                        tdi0970              
                                        tdi2431              

CodePudding user response:

Given your use-case, I think this is the best you can do:

In [2213]: output = pd.DataFrame()

In [2214]: for col in df.columns:
      ...:     output = pd.concat([output, df[col].dropna().reset_index(drop=True)], 1)
      ...: 

In [2217]: output = output.replace(np.nan, '')

In [2218]: output
Out[2218]: 
           Unknown   Audrey Banu_Prathap_Reddy  Carlton        Eric   Reiner  Krishna  Wilbert      Wim
0  tsnpt01labt004v  tdi2513            tdi0960  tdi2546  vms-wan-cs  tdi0424  tdi2479  tdi2459  tdi2263
1  tsnpt01labt005v                     tdi0963                       tdi0425           tdi2460  tdi2264
2          tdi0897                     tdi0966                       tdi0426           tdi2461         
3  tsnpt01labt003v                     tdi0765                       tdi1874           tdi2462         
4                                      tdi0969                                         tdi2463         
5                                      tdi0970                                         tdi2464         
6                                      tdi2431                                         tdi2465         
7                                                                                      tdi2466         
8                                                                                      tdi2467         
9                                                                                      tdi2468         

CodePudding user response:

You could also stack pivot. In order to use pivot, we must create groups first by the column names using groupby cumcount.

s = df.replace('Nan', float('nan')).stack()
out = (s.droplevel(0).reset_index(name='value')
       .assign(group=s.groupby(level=1).cumcount().to_numpy())
       .pivot('group', 'index', 'value')
       [df.columns]
       .fillna('')
       .rename_axis(columns=[None], index=[None]))

Output:

           Unknown   Audrey Banu_Prathap_Reddy  Carlton        Eric   Reiner  Krishna  Wilbert      Wim  
0  tsnpt01labt004v  tdi2513            tdi0960  tdi2546  vms-wan-cs  tdi0424  tdi2479  tdi2459  tdi2263  
1  tsnpt01labt005v                     tdi0963                       tdi0425           tdi2460  tdi2264  
2          tdi0897                     tdi0966                       tdi0426           tdi2461         
3  tsnpt01labt003v                     tdi0765                       tdi1874           tdi2462           
4                                      tdi0969                                         tdi2463           
5                                      tdi0970                                         tdi2464           
6                                      tdi2431                                         tdi2465           
7                                                                                      tdi2466           
8                                                                                      tdi2467              
9                                                                                      tdi2468           
  • Related