Pandas DataFrame重置缓存

时间:2017-10-23 14:36:13

标签: python pandas numpy

我在使用pandas DataFrame时遇到了麻烦。考虑关注DataFrametable

现在,如果我使用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')

correct

当我尝试过滤行时出现问题。如果我过滤掉列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'}

结果图包含空子图:

wrong

我不知道这种行为是否正确,但我更倾向于没有空子图。有没有办法重新加载DataFramereset_index无效。

到目前为止,我可以通过将其保存到csv并重新加载它来重新加载DataFrame,这不是很好。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的scale列必须是categorical dtype。过滤后,您需要致电remove_unused_categories()

df = df[['scale'] == 'weak']
df.scale.cat.remove_unused_categories(inplace=True)