在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]
有效,但效率可能不高。
答案 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'
列和
df.ix[:,df.columns=='Stale']
会将'Stale'
列作为DataFrame
返回,如果它在数据框中。否则为空DataFrame
。
df.get['Stale']
将'Stale'
列作为Series
返回,如果该列不存在,则会返回None
。
您不能只执行df['Stale']
,因为如果列不存在,则会引发keyError
。
答案 2 :(得分:0)
我建议使用pandas数据框的平移方法:
df == df.shift()
注意:几乎从不评论stackoverflow。