当前位置: 首页 > 面试题库 >

如何将列和行的pandas DataFrame子集转换为numpy数组?

仇正豪
2023-03-14
问题内容

我想知道是否有一种更简单,更节省内存的方法来从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/.ilocFYI也是如此)也可以单次完成。

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接口(如果我没记错的话,自Ope​​nCV 2.2起就可以使用)。它本机使用numpy数组: 结果:

  • Set似乎是一种创建具有保证唯一元素的数组的好方法,但它不提供任何获取属性的好方法,除了generator[Set].values,它以的尴尬方式调用。 如果您可以在集合上调用和类似的函数,那么这是可以的。但你也不能那样做。 我尝试过,但似乎只转换了类数组(NodeList和TypedArrays?)对象设置为数组。再试一次:对Sets不起作用,set.prototype没有类似的静态方法。 那么