Python:从DataFrame列中提取数组

时间:2016-01-17 19:19:43

标签: python arrays numpy pandas

我试图从DataFrames中提取数据作为单独的NumPy数组传递给SciPy stats方法。

示例DataFrame:

vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;

   Mat itt = Mat::zeros( imgThresholded.size(), CV_8UC1 );
itt = imgThresholded*255;

Canny( itt ,itt, 10, 30, 3 );
vector<vector<Point> > contours_poly( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );
vector<Rect> boundRect( contours.size() );
imshow("canny", itt);
//CIRCLE HOUGH
//vector<Vec3f> circles;
findContours( itt, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
for( int i = 0; i < contours.size(); i++ )
     {
         Scalar color = Scalar(255,255,255);

       if( contours[i].size() > points )
       {approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
      boundRect[i] = boundingRect( Mat(contours_poly[i]) );
       minEnclosingCircle( (Mat)contours_poly[i], center[i], radius[i] );
       circle( imgOriginal, center[i], (int)radius[i],color, 2, 8, 0 );
     }
     }

对于6个唯一的userId,我们只想为userId的147,222,389和443为userId numCol 147 1.3 222 2.6 389 5.7 443 1.2 222 2.4 678 2.1 443 1.8 501 2.1 147 1.2 501 3.2 678 1.3 389 2.4 的值提取4个单独的数组。

输出如下:

数组名称147:numCol
数组名称222:array([1.3, 1.2)]
数组名称389:array([2.6, 2.4)]
数组名称443:array([5.7, 2.4)]

我想知道最好的方法是为我想要的userId创建一个列表,然后使用pandas array([1.2, 1.8)]和NumPy isin循环使用DataFrame。< / p>

我仔细看过这个类似的question并且它不一样。

1 个答案:

答案 0 :(得分:1)

您可以使用类似df[df.userId == 147]的内容获取与特定userId相对应的行。因此,如果您有一个所需的userIds列表,您可以执行以下操作:

for userId in userIds_to_check:
    stats.anderson(df[df.userId == userId].numCol)

(或您要调用的任何函数,而不是anderson)。请注意,通常您不需要获得简单的numpy数组;你可以在熊猫系列上调用大多数统计函数,它们可以正常工作。如果由于某种原因确实需要简单的numpy数组,则可以执行df[df.userId == userId].numCol.values

根据您正在做的事情,您可能只想使用groupby,这样您就可以将功能映射到每个userId组,例如:

>>> df.groupby('userId').numCol.apply(stats.skew)

userId
147    0.000000e+00
222    0.000000e+00
389    3.954380e-16
443    0.000000e+00
501   -1.251190e-15
678   -8.673617e-16
Name: numCol, dtype: float64

在这里,我通过将stats.skew应用于每个组,一次性计算每个userId的numCol值的偏度。