我想知道是否有一个更简单,有效的内存方法来从熊猫数据框中选择行和列的子集。如何将pandas DataFrame的子列和行转换为numpy数组?
例如,给定此数据帧:
df = DataFrame(np.random.rand(4,5), columns = list('abcde')) print df a b c d e 0 0.945686 0.000710 0.909158 0.892892 0.326670 1 0.919359 0.667057 0.462478 0.008204 0.473096 2 0.976163 0.621712 0.208423 0.980471 0.048334 3 0.459039 0.788318 0.309892 0.100539 0.753992
我想只有那些在其中用于列“c”的值大于0.5的行,但我只需要列“b”和“E”为那些行。
这是我提出的方法 - 也许有更好的“熊猫”方式?
locs = [df.columns.get_loc(_) for _ in ['a', 'd']] print df[df.c > 0.5][locs] a d 0 0.945686 0.892892
我的最终目标是将结果转换为numpy的阵列传递到sklearn回归算法,所以我就用上面的代码是这样的:
training_set = array(df[df.c > 0.5][locs])
...那眼中钉因为我最终在内存中获得了巨大的阵列副本。也许有更好的办法呢?
最优雅。 .ix和.loc有什么区别? –
loc不会尝试使用数字(例如1)作为位置参数(并且会改为)。请参阅主要熊猫文档/选择数据 – Jeff