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

Posted

技术标签:

【中文标题】根据熊猫中的条件删除重复的列【英文标题】:Remove duplicate column based on a condition in pandas 【发布时间】:2021-04-14 19:01:38 【问题描述】:

我有一个 DataFrame,其中有一个重复的列,即天气。 As Seen in this picture of dataframe。其中一个包含 NaN 值,这是我要从 DataFrame 中删除的值。 这个方法我试过了

data_cleaned4.drop('Weather', axis=1)

它应该删除两列。我试图将条件传递给 drop 方法,但我做不到。它显示了一个错误。

data_cleaned4.drop(data_cleaned4['Weather'].isnull().sum() > 0, axis=1)

谁能告诉我如何删除此列。请记住,倒数第二个包含 NaN 值而不是最后一个。

【问题讨论】:

***.com/questions/14984119/… 试试这个。 我试过pandas.read_image,但它只是以“没有属性”的形式返回。您能否将数据帧作为代码发布,直到那些懒鬼实现它? 【参考方案1】:

由于名称重复,您可以稍微重命名,这就是下面代码的第一个留置权所做的,那么它应该可以工作......

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)

【讨论】:

【参考方案2】:

如果没有可测试的样本并假设您的数据框中的其他任何地方都没有 NaN

df = df.dropna(axis=1)

应该工作

【讨论】:

【参考方案3】:

一个通用的解决方案。 (df.isnull().any(axis=0).values) 获取哪些列具有任何 NaN 值,df.columns.duplicated(keep=False) 将所有重复项标记为 True,两者结合将给出您要保留的列

一般解决方案:

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

输出

    A   B   C   A
0   1   1   1   NaN
1   1   1   1   1.0
2   2   3   4   2.0
3   1   1   1   1.0

【讨论】:

这个成功了。感谢您的解决方案。 欢迎您! @Malik 因为它适用于您的问题,您可能会考虑接受,支持答案 我已经对您的回答投了赞成票,但它显示声望低于 15 的人所投的票被计算在内,但未被添加为公开。请支持我的问题,这可能会增加我的声誉。 完成。我想接受答案仍然有效

以上是关于根据熊猫中的条件删除重复的列的主要内容,如果未能解决你的问题,请参考以下文章

根据“如果单元格中的字符串”条件删除熊猫列中的行

如何使用熊猫对与给定条件匹配的列中的值求和?

如何从熊猫数据框中的列中删除字符串值

删除熊猫中的标点符号[重复]

熊猫数据框:在固定其他列的列中提取具有特定标准/条件最小值的数据[重复]

如何根据条件表达式从熊猫数据框中删除行[重复]