我是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
答案 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()]