如何删除列在第一行有Nan

时间:2017-06-02 10:23:27

标签: python null nan

enter image description here我有几个数据。第一行有一些元素是Nan,因此,我将删除它们。然后,以下数据框应删除相应的列。以下是我的数据帧的示例。请告知我如何删除第一行有Nan的列。

        Var1 Var2 Var3 Var4 NaN Var5 NaN Var6 NaN
Values  10   20   30   40   50  60   70  80   90
Values  10   20   30   40   x   60   y   80   z
Values  10   20   30   40   a   60   b   80   c

我有一个想法,那就是我将列的NaN(在第一行)放到最后一列,然后,我删除它们。但是,我想采取灵活的方式,因为我不确定“南楠”的数量是多少。第一行中的元素。我使用了很多方法,但没有成功。 X是DataFrame的名称: 来自tkinter.filedialog import askopenfilename

dirname=askopenfilename( initialdir='/.log', title= 'please select a directory')
j=pd.read_csv(dirname, header=None, sep=r";")
if None in x.ix[0]:
    y = x.drop([col for col in x if col in x.ix[0]], axis=1, inplace=True)

预期产出:

        Var1 Var2 Var3 Var4 Var5 Var6 
Values  10   20   30   40   60   80   
Values  10   20   30   40   60   80   
Values  10   20   30   40   60   80   

1 个答案:

答案 0 :(得分:0)

假设您有df

        Var1 Var2 Var3 Var4 NaN Var5 NaN Var6 NaN
Values  10   20   30   40   50  60   70  80   90
Values  10   20   30   40   x   60   y   80   z
Values  10   20   30   40   a   60   b   80   c

然后您可以删除名称为NaN的列:

df = df.drop([col for col in df.columns if col.strip()=='NaN'], axis=1)
df

它将是:

        Var1    Var2    Var3    Var4    Var5    Var6
Values  10      20      30      40      60      80
Values  10      20      30      40      60      80
Values  10      20      30      40      60      80

<强>更新

根据您的更新,您的df是:

    0     1     2     3     4   5     6   7    8
0   Var1  Var2  Var3  Var4  NaN Var5  NaN Var6 NaN
1   10    20    30    40    50  60    70  80   90
2   10    20    30    40    x   60    y   80    z
3   10    20    30    40    a   60    b   80    c

然后,您可以将第0行设置为列名称,并且基于列名称的过滤器不是nan:

import numpy as np
df.columns = df.iloc[0]
df = df[[col for col in df.columns if col is not np.nan]]
df

df将是:

    Var1  Var2  Var3  Var4  Var5  Var6
0   Var1  Var2  Var3  Var4  Var5  Var6
1   10    20    30    40    60    80
2   10    20    30    40    60    80
3   10    20    30    40    60    80