我对熊猫很新,如果它满足一系列行的条件,我想删除一个列。
A B C D
2017-01-01 0.132003 -0.827317 -0.076467 -1.187678
2017-01-02 1.130127 NaN -1.413681
2017-01-03 3.546974 NaN -1.555685 1.666978
2017-01-04 0.974466 NaN -0.410001 -0.078638
我想生成一个新的df,没有任何列在最后2个日期给出NaN。
答案 0 :(得分:2)
您可以使用loc
和mask
进行过滤 - 获取True
时的列:
print (df.loc[:,~df.iloc[-2:].isnull().all()])
A C D
2017-01-01 0.132003 -0.076467 -1.187678
2017-01-02 1.130127 -1.413681 NaN
2017-01-03 3.546974 -1.555685 1.666978
2017-01-04 0.974466 -0.410001 -0.078638
<强>解释强>:
print (df.iloc[-2:])
#alternative
#print (df.tail(2))
A B C D
2017-01-03 3.546974 NaN -1.555685 1.666978
2017-01-04 0.974466 NaN -0.410001 -0.078638
检查isnull
:
print (df.iloc[-2:].isnull())
A B C D
2017-01-03 False True False False
2017-01-04 False True False False
检查all
列中的所有值是否为True
:
print (df.iloc[-2:].isnull().all())
A False
B True
C False
D False
dtype: bool
~
反转boollean面具:
print (~df.iloc[-2:].isnull().all())
A True
B False
C True
D True
dtype: bool
编辑:
也可以通过loc
选择另一个切片:
print (df.loc['2017-01-03':'2017-01-04'])
A B C D
2017-01-03 3.546974 NaN -1.555685 1.666978
2017-01-04 0.974466 NaN -0.410001 -0.078638
print (df.loc[:,~df.loc['2017-01-03':'2017-01-04'].isnull().all()])
A C D
2017-01-01 0.132003 -0.076467 -1.187678
2017-01-02 1.130127 -1.413681 NaN
2017-01-03 3.546974 -1.555685 1.666978
2017-01-04 0.974466 -0.410001 -0.078638