我有几个数据。第一行有一些元素是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
答案 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