根据熊猫中的条件删除重复列

时间:2021-01-09 05:37:19

标签: python pandas numpy data-science data-analysis

我有一个 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 值,而不是最后一个。

3 个答案:

答案 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