Python 如何检查数据帧中的列是否过时?
查询DataFrame列中的过时(不变数据)以便返回“Stale”列的最快方法是什么 例如: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
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我想不出一个,我花了很多时间查看数据帧源,我只是为了这个目的再次扫描了它,但是到目前为止,我想不出任何东西,除了缓慢的减少,或者可能是一个在数据进入时监视数据的管理器对象,但是在任何一个小例子中,我认为它会慢得多,并且您需要全面使用它来证明性能的提高。