簡體   English   中英

如何刪除 pandas 中的 nan 值?

[英]how to delete nan values in pandas?

如何刪除pandas中的 NaN 值? 當我將代碼打印到 (.csv) 時。 這些列是不規則的並且填充了 NaN 值。

import pandas as pd

egzersizler = [{'Hareket Adı': 'Smith Machine Shrug', 'Url': 'https://www.bodybuilding.com/exercises/smith-machine-shrug'}, {'Hareket Adı': 'Leverage Shrug', 'Url': 'https://www.bodybuilding.com/exercises/leverage-shrug'}, {'Hareket Adı': 'Standing Dumbbell Upright Row', 'Url': 'https://www.bodybuilding.com/exercises/standing-dumbbell-upright-row'}, {'Hareket Adı': 'Kettlebell Sumo High Pull', 'Url': 'https://www.bodybuilding.com/exercises/kettlebell-sumo-high-pull'}, {'Hareket Adı': 'Dumbbell Shrug', 'Url': 'https://www.bodybuilding.com/exercises/dumbbell-shrug'}, {'Hareket Adı': 'Calf-Machine Shoulder Shrug', 'Url': 'https://www.bodybuilding.com/exercises/calf-machine-shoulder-shrug'}, {'Hareket Adı': 'Barbell Shrug', 'Url': 'https://www.bodybuilding.com/exercises/barbell-shrug'}, {'Hareket Adı': 'Barbell Shrug Behind The Back', 'Url': 'https://www.bodybuilding.com/exercises/barbell-shrug-behind-the-back'}, {'Hareket Adı': 'Upright Cable Row', 'Url': 'https://www.bodybuilding.com/exercises/upright-cable-row'}, {'Hareket Adı': 'Cable Shrugs', 'Url': 'https://www.bodybuilding.com/exercises/cable-shrugs'}, {'Hareket Adı': 'Upright Row - With Bands', 'Url': 'https://www.bodybuilding.com/exercises/upright-row-with-bands'}, {'Hareket Adı': 'Smith Machine Behind the Back Shrug', 'Url': 'https://www.bodybuilding.com/exercises/smith-machine-behind-the-back-shrug'}, {'Hareket Adı': 'Smith Machine Upright Row', 'Url': 'https://www.bodybuilding.com/exercises/smith-machine-upright-row'}, {'Hareket Adı': 'Clean Shrug', 'Url': 'https://www.bodybuilding.com/exercises/clean-shrug'}, {'Hareket Adı': 'Scapular Pull-Up', 'Url': 'https://www.bodybuilding.com/exercises/scapular-pull-up'}, {'Hareket Adı': 'Snatch Shrug', 'Url': 'https://www.bodybuilding.com/exercises/snatch-shrug'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Kas Grubu': 'Traps'}, {'Ekipmanlar': 'Machine'}, {'Ekipmanlar': 'Machine'}, {'Ekipmanlar': 'Dumbbell'}, {'Ekipmanlar': 'Kettlebells'}, {'Ekipmanlar': 'Dumbbell'}, {'Ekipmanlar': 'Machine'}, {'Ekipmanlar': 'Barbell'}, {'Ekipmanlar': 'Barbell'}, {'Ekipmanlar': 'Cable'}, {'Ekipmanlar': 'Cable'}, {'Ekipmanlar': 'Bands'}, {'Ekipmanlar': 'Machine'}, {'Ekipmanlar': 'Machine'}, {'Ekipmanlar': 'Barbell'}, {'Ekipmanlar': 'None'}, {'Ekipmanlar': 'Barbell'}, {'Düzey': 'Level: Beginner'}, {'Düzey': 'Level: Beginner'}, {'Düzey': 'Level: Beginner'}, {'Düzey': 'Level: Intermediate'}, {'Düzey': 'Level: Beginner'}, {'Düzey': 'Level: Beginner'}, {'Düzey': ''}, {'Düzey': 'Level: Beginner'}, {'Düzey': 'Level: Intermediate'}, {'Düzey': 'Level: Beginner'}, {'Düzey': 'Level: Beginner'}, {'Düzey': 'Level: Beginner'}, {'Düzey': 'Level: Beginner'}, {'Düzey': 'Level: Beginner'}, {'Düzey': 'Level: Beginner'}, {'Düzey': 'Level: Intermediate'}]

df=pd.DataFrame(egzersizler, columns = ['Hareket Adı','Url','Düzey','Kas Grubu','Ekipmanlar'] )

print (df)

在此處輸入圖像描述

在此處輸入圖像描述

試試這個,它應該修復你的數據框:

ndf = df
ndf['Kas Grubu'] = ndf['Kas Grubu'].dropna().reset_index().drop(columns='index') 
ndf['Ekipmanlar'] = ndf['Ekipmanlar'].dropna().reset_index().drop(columns='index') 
ndf['Düzey'][54]="Level: Unknown"
ndf['Düzey'] = ndf['Düzey'].dropna().reset_index().drop(columns='index') 
ndf = ndf.dropna() 

要顯示完整的 URL,請使用此選項:

pd.set_option('display.max_colwidth', -1) 

您可以將Series.dropnaapply一起使用:

#pandas 0.24+
df1 = df.apply(lambda x: pd.Series(x.dropna().to_numpy()))

#pandas bellow
df1 = df.apply(lambda x: pd.Series(x.dropna().values))

如果所有數據都是字符串並且性能很重要,則可以使用稍微更改的justify函數::

df1 = pd.DataFrame(justify(df.values, invalid_val=np.nan, axis=0), 
                  index=df.index, 
                  columns=df.columns).dropna(how='all')

功能:

def justify(a, invalid_val=0, axis=1, side='left'):    
    """
    Justifies a 2D array

    Parameters
    ----------
    A : ndarray
        Input array to be justified
    axis : int
        Axis along which justification is to be made
    side : str
        Direction of justification. It could be 'left', 'right', 'up', 'down'
        It should be 'left' or 'right' for axis=1 and 'up' or 'down' for axis=0.

    """

    if invalid_val is np.nan:
        mask = pd.notna(a)
    else:
        mask = a!=invalid_val
    justified_mask = np.sort(mask,axis=axis)
    if (side=='up') | (side=='left'):
        justified_mask = np.flip(justified_mask,axis=axis)
    out = np.full(a.shape, invalid_val, dtype=object) 
    if axis==1:
        out[justified_mask] = a[mask]
    else:
        out.T[justified_mask.T] = a.T[mask.T]
    return out

輸出

                            Hareket Adı  \
0                   Smith Machine Shrug   
1                        Leverage Shrug   
2         Standing Dumbbell Upright Row   
3             Kettlebell Sumo High Pull   
4                        Dumbbell Shrug   
5           Calf-Machine Shoulder Shrug   
6                         Barbell Shrug   
7         Barbell Shrug Behind The Back   
8                     Upright Cable Row   
9                          Cable Shrugs   
10             Upright Row - With Bands   
11  Smith Machine Behind the Back Shrug   
12            Smith Machine Upright Row   
13                          Clean Shrug   
14                     Scapular Pull-Up   
15                         Snatch Shrug   

                                                  Url                Düzey  \
0   https://www.bodybuilding.com/exercises/smith-m...      Level: Beginner   
1   https://www.bodybuilding.com/exercises/leverag...      Level: Beginner   
2   https://www.bodybuilding.com/exercises/standin...      Level: Beginner   
3   https://www.bodybuilding.com/exercises/kettleb...  Level: Intermediate   
4   https://www.bodybuilding.com/exercises/dumbbel...      Level: Beginner   
5   https://www.bodybuilding.com/exercises/calf-ma...      Level: Beginner   
6   https://www.bodybuilding.com/exercises/barbell...                        
7   https://www.bodybuilding.com/exercises/barbell...      Level: Beginner   
8   https://www.bodybuilding.com/exercises/upright...  Level: Intermediate   
9   https://www.bodybuilding.com/exercises/cable-s...      Level: Beginner   
10  https://www.bodybuilding.com/exercises/upright...      Level: Beginner   
11  https://www.bodybuilding.com/exercises/smith-m...      Level: Beginner   
12  https://www.bodybuilding.com/exercises/smith-m...      Level: Beginner   
13  https://www.bodybuilding.com/exercises/clean-s...      Level: Beginner   
14  https://www.bodybuilding.com/exercises/scapula...      Level: Beginner   
15  https://www.bodybuilding.com/exercises/snatch-...  Level: Intermediate   

   Kas Grubu   Ekipmanlar  
0      Traps      Machine  
1      Traps      Machine  
2      Traps     Dumbbell  
3      Traps  Kettlebells  
4      Traps     Dumbbell  
5      Traps      Machine  
6      Traps      Barbell  
7      Traps      Barbell  
8      Traps        Cable  
9      Traps        Cable  
10     Traps        Bands  
11     Traps      Machine  
12     Traps      Machine  
13     Traps      Barbell  
14     Traps         None  
15     Traps      Barbell  

暫無
暫無

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

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