我想知道是否有一种更简单,更节省内存的方法来从pandas DataFrame中选择行和列的子集。
例如,给定此数据框:
df = DataFrame(np.random.rand(4,5),列= 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’。
这是我想出的方法-也许有更好的“熊猫”方式?
locs = [df.columns.get_loc(_)in ['a','d']]中的_
打印df [df.c> 0.5] [位置]
广告
0 0.945686 0.892892
我的最终目标是将结果转换为numpy数组以传递给sklearn回归算法,因此我将使用上面的代码,如下所示:
training_set = array(df [df.c> 0.5] [位置])
…这让我很烦,因为我最终在内存中存储了一个巨大的数组副本。也许还有更好的方法吗?
.loc
同时接受行和列选择器(.ix/.iloc
FYI也是如此)也可以单次完成。
In [1]: df = DataFrame(np.random.rand(4,5), columns = list('abcde'))
In [2]: df
Out[2]:
a b c d e
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]:
a d
0 0.669701 0.451573
1 0.952762 0.643251
2 0.900713 0.505775
并且,如果您想要这些值(尽管它应该直接传递给sklearn);框架支持阵列接口
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]])
我想知道是否有一种更简单、内存高效的方法来从熊猫数据帧中选择行和列的子集。 例如,给定此数据帧: 我只想要那些列c的值大于0.5的行,但是我只需要那些行的列b和e。 这就是我想出的方法——也许有更好的“熊猫”方法? 我的最终目标是将结果转换为numpy数组,并传递到sklearn回归算法中,因此我将使用上面的代码,如下所示: …这让我很恼火,因为我最终在内存中获得了一个巨大的数组副本。也许还有更好
问题内容: 假设我有; 我尝试转换; 我现在正在vstack上通过迭代来解决它,但是对于特别大的LIST来说确实很慢 您对最佳有效方法有何建议? 问题答案: 通常,您可以沿任意轴连接整个数组序列: 但你 也 必须对列表中的形状和每个阵列的维度担心(用于2维3x5的输出,你需要确保它们都是2维正由-5阵列的话)。如果要将一维数组连接为二维输出的行,则需要扩展其维数。 正如Jorge的答案所指出的那样
问题内容: 我在与要转换为numpy数组的视频相同的文件夹中有一个python脚本。我的视频称为“ test.mp4”。 在我的脚本中,我想调用并返回一个numpy数组。所得的numpy数组应为图像的numpy数组,其中每个图像均为3-d numpy数组。 那有意义吗? 谢谢! 问题答案: 下面的脚本可以满足您的需求。您可以将它的一部分分成函数。 下面的代码不检查错误,特别是生产代码将检查每个变量
问题内容: 我使用一个外部模块(libsvm),该模块不支持numpy数组,仅支持元组,列表和字典。但是我的数据是二维二维数组。我如何以pythonic方式转换它,也就是没有循环。 问题答案: 您可以简单地将矩阵转换为,以证明:
问题内容: 我有一个RGB图像。我想将其转换为numpy数组。我做了以下 它创建一个没有形状的数组。我假设它是一个iplimage对象。 问题答案: 您可以使用较新的OpenCV python接口(如果我没记错的话,自OpenCV 2.2起就可以使用)。它本机使用numpy数组: 结果:
Set似乎是一种创建具有保证唯一元素的数组的好方法,但它不提供任何获取属性的好方法,除了generator[Set].values,它以的尴尬方式调用。 如果您可以在集合上调用和类似的函数,那么这是可以的。但你也不能那样做。 我尝试过,但似乎只转换了类数组(NodeList和TypedArrays?)对象设置为数组。再试一次:对Sets不起作用,set.prototype没有类似的静态方法。 那么