如何从生成的pandas数据帧中删除dtype和Name

时间:2014-12-15 14:53:56

标签: python pandas

我是Python的新手。不确定这是否是一个正确的问题。对于某些操作,请输入以下结果c(一个pandas数据帧)。我的问题是如何从这个结果中删除Name和dtype并提取普通值,即[3,1,1,3....]。有没有办法做到这一点?

res包含索引,使用它我需要在dfxn中找到相应的行。

dfxn 
Out[207]: 
         0      1       2      3      4      5      6  7
0    14.38  14.21  0.8951  5.386  3.312  2.462  4.956  1
1    10.83  12.96  0.8099  5.278  2.641  5.182  5.185  3
2    16.77  15.62  0.8638  5.927  3.438  4.920  5.795  2
3    10.74  12.73  0.8329  5.145  2.642  4.702  4.963  3
4    20.16  17.03  0.8735  6.513  3.773  1.910  6.185  2
5    12.78  13.57  0.8716  5.262  3.026  1.176  4.782  1
6    17.98  15.85  0.8993  5.979  3.687  2.257  5.919  2
7    19.13  16.31  0.9035  6.183  3.902  2.109  5.924  2
8    20.24  16.91  0.8897  6.315  3.962  5.901  6.188  2
9    10.59  12.41  0.8648  4.899  2.787  4.975  4.794  3
10   18.72  16.19  0.8977  6.006  3.857  5.324  5.879  2
11   11.41  12.95  0.8560  5.090  2.775  4.957  4.825  3
12   10.79  12.93  0.8107  5.317  2.648  5.462  5.194  3
13   12.54  13.67  0.8425  5.451  2.879  3.082  5.491  3
14   11.27  12.86  0.8563  5.091  2.804  3.985  5.001  3
15   15.01  14.76  0.8657  5.789  3.245  1.791  5.001  1
16   15.03  14.77  0.8658  5.702  3.212  1.933  5.439  1
17   16.23  15.18  0.8850  5.872  3.472  3.769  5.922  2
18   14.29  14.09  0.9050  5.291  3.337  2.699  4.825  1
19   11.35  13.12  0.8291  5.176  2.668  4.337  5.132  3
20   12.62  13.67  0.8481  5.410  2.911  3.306  5.231  3
21   11.55  13.10  0.8455  5.167  2.845  6.715  4.956  3
     . . . . 
     . . . . 

res
Out[206]: 
      0
0    90
1    78
2   115
3    38
4    43
5   103
6    14
7    23
8    39
9    21
10   67
11   53
12   59
13  110
14   93
15   96
16   89
17  114
18  124
19  131
.
.
.


while i<len(res):
      c[i]=dfxn.ix[res[i]]['7']
      i+=1


c
Out[196]:
  0
0 21 3
Name: 7, dtype: int64
1 90 1
Name: 7, dtype: int64
2 78 1
Name: 7, dtype: int64
3 115 3
Name: 7, dtype: int64
4 38 1
Name: 7, dtype: int64
5 43 1
Name: 7, dtype: int64
6 103 1
Name: 7, dtype: int64
7 14 3

1 个答案:

答案 0 :(得分:1)

看起来c可能不是DataFrame;它可能是一个Series对象的列表,这就是它打印的原因。您可以查看type(c)进行确认或反驳。无论如何,提取值的更好方法是将索引用作数组 - 您不需要使用循环。

import pandas as pd
df = pd.DataFrame({'a':range(10), 'b':[i+5 for i in range(10)]})
res = pd.DataFrame([2,5,6,8])

c = df['b'].ix[res.values.ravel()]
print(c)

产量

2     7
5    10
6    11
8    13
Name: b, dtype: int64

在你的情况下,它将是

c = dfxn['7'].ix[res.values.ravel()]