根据熊猫中的条件删除重复的列
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 的人所投的票被计算在内,但未被添加为公开。请支持我的问题,这可能会增加我的声誉。 完成。我想接受答案仍然有效以上是关于根据熊猫中的条件删除重复的列的主要内容,如果未能解决你的问题,请参考以下文章