我在使用pandas
DataFrame
时遇到了麻烦。考虑关注DataFrame
:
现在,如果我使用seaborn
FacetGrid
绘制多个子图。在这种情况下,子图基于列scale
。它只能正确创建2个子图,因为列scale
中只有两个唯一值:
简单代码:
print(df['scale'].value_counts())
print(set(df['scale']))
会产生:
weak 960
strong 890
Name: scale, dtype: int64
{'weak', 'strong'}
生成图的示例:
g = seaborn.FacetGrid(df, row='scale')
g.map(plt.plot, 'proc', 'wall_avg')
当我尝试过滤行时出现问题。如果我过滤掉列scale
值为weak
的所有行,我应该只有一个子图,但我仍有2个子图,即使DataFrame
不包含任何其他scale
}。
# filter rows
df = df[['scale'] == 'weak']
# print details about column scale
print(df['scale'].value_counts())
print(set(df['scale']))
会产生:
weak 960
strong 0
Name: scale, dtype: int64
{'weak'}
结果图包含空子图:
我不知道这种行为是否正确,但我更倾向于没有空子图。有没有办法重新加载DataFrame
?
reset_index
无效。
到目前为止,我可以通过将其保存到csv并重新加载它来重新加载DataFrame
,这不是很好。
感谢您的帮助!
答案 0 :(得分:1)
您的scale
列必须是categorical
dtype。过滤后,您需要致电remove_unused_categories()
:
df = df[['scale'] == 'weak']
df.scale.cat.remove_unused_categories(inplace=True)