python - 如何删除 pandas 中的 nan 值?

标签 python 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)

enter image description here

enter image description here

最佳答案

您可以使用Series.dropna应用:

#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  

关于python - 如何删除 pandas 中的 nan 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097688/

相关文章:

java - Java 中的 struct.unpack_from

python - 我提供小批量的 scikit-learn 分类器的小批量训练

python - aiohttp.ClientSession().post

python - Pandas 根据列名称和内容删除列

python - 获取时间点,并针对日期时间对象制作标签以关联点周围的事物

python - 如何截断日期时间对象的时间?

python - 如果没有 Marionette,Geckodriver/Firefox 如何工作? (针对 FF 53 运行 python selenium 3)

pandas - 使用日期时间列类型设置主要 Xtick

python - 检查列的每个值是否包含整数,如果不包含则打印该单元格的索引

python - 如何在 Pandas 中使用 read_csv 读取时区感知日期时间作为时区天真的本地 DatetimeIndex?