如何检查DataFrame中的列是否过时?

时间:2014-11-10 18:58:31

标签: python pandas

在DataFrame列中查询陈旧(不变数据)的最快方法是什么,这样它就会返回“陈旧”字样。列?

例如:

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

我希望得到陈旧'陈旧'列返回。现在我在做: df.columns[df.std() == 0.0]有效,但效率可能不高。

3 个答案:

答案 0 :(得分:1)

此:

df.columns[df.std() == 0.0]

返回'Stale'索引,因为陈旧列的标准偏差为零。

如果将“陈旧性”定义为不变数据,df.var() == 0稍快一些(可能因为您不需要取平方根)。我也想到了df.max() == df.min(),但实际上速度较慢。

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

df[df.columns[df.var() == 0.0]]

答案 1 :(得分: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'列和

的DataFrame视图

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

df.get['Stale']'Stale'列作为Series返回,如果该列不存在,则会返回None

您不能只执行df['Stale'],因为如果列不存在,则会引发keyError

答案 2 :(得分:0)

我建议使用pandas数据框的平移方法:

     df == df.shift()

注意:几乎从不评论stackoverflow。