【发布时间】:2017-05-03 10:18:15
【问题描述】:
原始数据框:
dp.head(10)
使用推荐的选择方法创建新的数据框:
dtest = pd.DataFrame(dp[dp['numdept'].isin([3,6,8,10])]).dropna()
dtest.reset_index(drop =True, inplace = True)
dtest.head(10)
测试以确保只有 [3,6,8,10] 中的值在 dtest['numdept'] 中:
print "numdept is 5:", dtest[dtest["numdept"].isin ([5])]
print "set of distinct values in the numdept column:", sorted(set(dtest['numdept'].tolist()))
>> numdept is 5: Empty DataFrame
>> Columns: [numgrade, numyear, numdept]
>> Index: []
>> set of distinct values in the numdept column: [3, 6, 8, 10]
绘图:
plt.figure(figsize=(16, 8))
sb.boxplot(x="numyear", y="numgrade", hue="numdept", data=dtest)
问题:为什么情节图例中的“nummdept”类别显示的值不是 3、6、8、10?
问题出现在 ipython 笔记本中,但即使我将代码带到常规环境中也会再次出现。还试图通过使用here的建议来避免与seaborn相关的问题,但无济于事。
使用 Canopy 1.7.4.3348、jupyter 1.0.0-15、pandas 0.19.0-1 matplotlib 1.5.1-9 和 seaborn 0.7.0-6
编辑:一时冲动,在绘图代码前插入以下内容:
grouped = dtest.groupby(['numdept', 'numyear'])
grouped.mean()
输出包含 numdept 值,这些值不应存在于 dtest 中。
这是否使它成为熊猫错误?
【问题讨论】:
-
这看起来符合我的预期。你到底觉得哪里不对?
-
@josh 情节图例不应该只显示 3、6、8、10 吗?
-
@josh 好主意 :)
-
使用以下命令可以得到您所期望的 4 值图例:
dp = pd.concat([pd.DataFrame(np.random.randint(1, 4, [100, 1])), pd.DataFrame(np.random.randint(1, 14, [100, 1])), pd.DataFrame([3]*20 + [6]*20 + [8]*20 + [10]*20 + [11]*20)], axis=1)。抱歉,它不是很整洁。不知道为什么你的不只显示 4 个。 -
原始数据帧是如何生成的?任何列都是分类的吗?
标签: python pandas matplotlib seaborn