2014-09-29 58 views
1

我做了以下内容:pandaslooping通过分组数据的情节

for grp, val in df_grp: 
    ax1.plot(val.concentration,val.capacity,'o', label = grp)  
ax1.set_xlim(0,2.5) 
plt.legend(loc=1, bbox_to_anchor=[0,0,1.5,1]) 

我如何摆脱括号中,“U”和引号?

Result from plot

回答

1

由于您使用的是组标签,标签实际上的tuple代表每个组,迅速解决该str属性:

In [42]: 

print df 
    v1 v2 v3 
0 A 11 1 
1 A 11 2 
2 A 30 3 
3 A 30 4 
4 B 45 5 
5 B 45 6 
6 B 12 7 
7 B 12 8 
In [43]: 

ax = plt.subplot(111) 
for grp, val in df.groupby(['v1', 'v2']): 
    ax.plot(val.v3,val.v3-1,'o', label = grp) 
L = ax.legend(loc=4) 
_ = [item.set_text(' '.join(map(str, eval(item.get_text())))) for item in L.get_texts()] 

enter image description here

显示它一步一步:

In [38]: 

[item.get_text() for item in L.get_texts()] 
Out[38]: 
["('A', 11)", "('A', 30)", "('B', 12)", "('B', 45)"] 
In [39]: 

[eval(item.get_text()) for item in L.get_texts()] #convert them back to tuple 
Out[39]: 
[('A', 11), ('A', 30), ('B', 12), ('B', 45)] 
In [41]: 

[' '.join(map(str, eval(item.get_text()))) for item in L.get_texts()] #into strings 
Out[41]: 
['A 11', 'A 30', 'B 12', 'B 45'] 
+0

+1给我一个更好的理解python和这个很好的答案 – Moritz 2014-09-30 08:47:02

+0

但什么是下划线? – Moritz 2014-09-30 08:53:14

+0

'.set_text()'方法返回'None'。因此,如果您使用的是交互式环境,最后一步是返回'[None,None,None ...]','_ ='禁止输出。 – 2014-09-30 14:43:21