我有一个 DataFrame,其中有一个重复的列,即天气。 As Seen in this picture of dataframe。其中之一包含 NaN 值,这是我想从 DataFrame 中删除的值。 我试过这个方法
data_cleaned4.drop('Weather', axis=1)
它应该删除了两列。我试图通过一个条件来删除方法,但我不能。它显示了一个错误。
data_cleaned4.drop(data_cleaned4['Weather'].isnull().sum() > 0, axis=1)
谁能告诉我如何删除此列。请记住,倒数第二个包含 NaN 值,而不是最后一个。
答案 0 :(得分:0)
由于名称重复,您可以稍微重命名,这就是代码 belwo 的第一个留置权所做的,然后它应该可以工作...
data_cleaned4 = data_cleaned4.iloc[:, [j for j, c in enumerate(data_cleaned4.columns) if j != i]]
checkone = data_cleaned4.iloc[:,-1].isna().any()
checktwo = data_cleaned4.iloc[:,-2].isna().any()
if checkone:
data_cleaned4.drop(data_cleaned4.columns[-1], axis=1)
elif checktwo:
data_cleaned4.drop(data_cleaned4.columns[-2], axis=1)
else:
data_cleaned4.drop(data_cleaned4.columns[-2], axis=1)
答案 1 :(得分:0)
没有可测试的样本并假设您的数据帧中的其他任何地方都没有 NaN
Foo
应该可以
答案 2 :(得分:0)
通用解决方案。 AucklandAucklandarea
or
WellingtonWellingtonarea
获取哪些列具有任何 (df.isnull().any(axis=0).values)
值,NaN
将所有重复项标记为 True,两者结合将给出您想要保留的列
一般解决方案:
df.columns.duplicated(keep=False)
输入
df.loc[:, ~((df.isnull().any(axis=0).values) & df.columns.duplicated(keep=False))]
输出
A B C C A
0 1 1 1 3.0 NaN
1 1 1 1 2.0 1.0
2 2 3 4 NaN 2.0
3 1 1 1 4.0 1.0
仅针对第 A B C
0 1 1 1
1 1 1 1
2 2 3 4
3 1 1 1
列:
C
输入
df.loc[:, ~(df.columns.duplicated(keep=False) & (df.isnull().any(axis=0).values)
& (df.columns == 'C'))]
输出
A B C C A
0 1 1 1 3.0 NaN
1 1 1 1 2.0 1.0
2 2 3 4 NaN 2.0
3 1 1 1 4.0 1.0