Python 如何检查数据帧中的列是否过时?

Python 如何检查数据帧中的列是否过时?,python,pandas,Python,Pandas,查询DataFrame列中的过时(不变数据)以便返回“Stale”列的最快方法是什么 例如: from pandas import DataFrame from numpy.random import randn df = DataFrame(randn(50, 5)) df['Stale'] = 100.0 将产生与以下类似的df: 0 1 2 3 4 Stale 0 -0.064293 1.22

查询DataFrame列中的过时(不变数据)以便返回“Stale”列的最快方法是什么

例如:

from pandas import DataFrame
from numpy.random import randn

df = DataFrame(randn(50, 5))
df['Stale'] = 100.0
将产生与以下类似的df:

      0         1         2         3         4         Stale
0 -0.064293  1.226319 -1.162909 -0.574240 -0.547402     100.0
1  0.529428  0.587148  0.367549  0.066041 -0.071709     100.0
2 -0.112633  0.217315  0.810061 -0.610718  0.179225     100.0
3  0.513706 -2.300195 -0.895974  0.853926 -1.604018     100.0
4  0.410546  0.641980  0.611272  1.121002 -1.082460     100.0
我想返回“Stale”列。现在我正在做:
df.columns[df.std()==0.0]
虽然有效,但可能效率不高。

这是:

df.columns[df.std() == 0.0]
返回“Stale”索引,因为Stale列的标准偏差为零

如果将“过时”定义为不变数据,
df.var()==0
稍微快一点(可能是因为不需要取平方根)。我还想检查一下
df.max()==df.min()
,但实际上速度较慢

要使用此信息返回列,请执行以下操作:

df[df.columns[df.var() == 0.0]]
那么:

if 'Stale' in df.columns: #test if you have a column named 'Stale'
    _df = df.ix[:,df.columns!='Stale']
    #do something on the DataFrame without the 'Stale' column
else:
    #_df = df
    #do something to the DataFrame directly.
我可以想到您有以下几种选择:

df.ix[:,df.columns!='Stale']
将返回数据帧的视图,其中不包含
'Stale'
列和

df.ix[:,df.columns=='Stale']
'Stale'
列作为
数据帧返回,如果它在数据帧中。否则为空的
数据帧

df.get['Stale']
'Stale'
列作为
系列
返回,如果该列不存在,它将返回


您不能只执行
df['Stale']
,因为如果列不在那里,将引发
keyError

我建议使用熊猫数据帧的移位方法:

     df == df.shift()

注意:几乎从不评论stackoverflow。

我不明白。如果您想要Stale列,只需执行
df['Stale']
。我事先不知道这一点。我正在处理非常大的数据集,我想知道哪些列只包含过时的数据,以便在对它们应用计算之前删除它们。我提供的代码只是为了创建一个假设情况的示例,但我仍然不明白。你说的“陈腐”是什么意思?在您的示例中,您刚刚创建了一个名为“Stale”的列,并询问如何获取它。在您的实际数据中,您(人类)如何知道您认为哪些数据是过时的?我想我可能已经回答了您的问题,如果是,请接受。同意@BrenBarn的说法,您需要为我们多定义一点“过时”的含义。OP不希望检测具有可读列名“过时”的列,请看关于这个问题的评论。好吧,那基本上就是我当时所做的,除了从Var到Std的sqrt转换。没有更好的方法来找到包含不变数据的列吗?@Muppet我想不出一个,我花了很多时间查看数据帧源,我只是为了这个目的再次扫描了它,但是到目前为止,我想不出任何东西,除了缓慢的减少,或者可能是一个在数据进入时监视数据的管理器对象,但是在任何一个小例子中,我认为它会慢得多,并且您需要全面使用它来证明性能的提高。