如何将一个pandas DataFrame列和行的子集转换成一个numpy数组?
我想知道是否有一种更简单,高效的内存方法来从pandas数据框中select行和列的子集。
例如,给定这个数据框:
df = DataFrame(np.random.rand(4,5),columns = list('abcde')) 打印df ABCDE 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'。
这是我提出的方法 – 也许有一个更好的“pandas”方式?
locs = [[a','d']]中的[df.columns.get_loc(_)] 打印df [df.c> 0.5] [locs] 广告 0 0.945686 0.892892
我的最终目标是将结果转换为一个numpy数组传递给sklearn回归algorithm,所以我将使用上面的代码:
training_set = array(df [df.c> 0.5] [locs])
…因为我最终在内存中获得了巨大的arrays副本,所以这让我感到厌恶。 也许还有更好的办法呢?
.loc
同时接受行和列select器(就像.ix/.iloc
FYI一样)这也是一次完成的。
In [1]: df = DataFrame(np.random.rand(4,5), columns = list('abcde')) In [2]: df Out[2]: abcde 0 0.669701 0.780497 0.955690 0.451573 0.232194 1 0.952762 0.585579 0.890801 0.643251 0.556220 2 0.900713 0.790938 0.952628 0.505775 0.582365 3 0.994205 0.330560 0.286694 0.125061 0.575153 In [5]: df.loc[df['c']>0.5,['a','d']] Out[5]: ad 0 0.669701 0.451573 1 0.952762 0.643251 2 0.900713 0.505775
如果你想要的价值(尽pipe这应该直接传递给sklearn); 帧支持arrays接口
In [6]: df.loc[df['c']>0.5,['a','d']].values Out[6]: array([[ 0.66970138, 0.45157274], [ 0.95276167, 0.64325143], [ 0.90071271, 0.50577509]])
直接使用它的值:
In [79]: df[df.c > 0.5][['b', 'e']].values Out[79]: array([[ 0.98836259, 0.82403141], [ 0.337358 , 0.02054435], [ 0.29271728, 0.37813099], [ 0.70033513, 0.69919695]])
也许像这样的第一个问题,你可以简单地通过他们的名字访问列:
>>> df = pd.DataFrame(np.random.rand(4,5), columns = list('abcde')) >>> df[df['c']>.5][['b','e']] be 1 0.071146 0.132145 2 0.495152 0.420219
对于第二个问题:
>>> df[df['c']>.5][['b','e']].values array([[ 0.07114556, 0.13214495], [ 0.49515157, 0.42021946]])