2017-10-23 10 views
1

pandasDataFrameで作業するときに問題が発生しています。 DataFrame次の点を考慮 tablePandas DataFrameリセットキャッシュ

を今、私は、複数のサブプロットをプロットするseabornFacetGridを使用した場合。この場合、サブプロットは列scaleに基づいています。

シンプルコード:

print(df['scale'].value_counts()) 
print(set(df['scale'])) 

が生成されます。生成されたフィギュアの

weak  960 
strong 890 
Name: scale, dtype: int64 
{'weak', 'strong'} 

例:

の列 scaleで唯一の2つのユニークな値があるので、それは正しくのみ2サブプロットを作成します
g = seaborn.FacetGrid(df, row='scale') 
g.map(plt.plot, 'proc', 'wall_avg') 

correct

行をフィルタリングしようとすると問題が発生します。列scaleの値がweakのすべての行をフィルタリングすると、1つのサブプロットだけで図が得られるはずですが、DataFrameには他のscaleは含まれていませんが、まだ2つのサブプロットがあります。

# 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

この動作が正しいものである場合、私は知らないが、私が好むだろう空のサブプロットはありません。 DataFrameをリロードする方法はありますか? reset_indexは動作しません。

これまでのところ、私はDataFrameをcsvに保存して再読み込みすることができます。

ありがとうございました!

+2

'print(df ['scale'] .dtype)'とは何ですか? – jezrael

+0

私は 'category' dtype – x3mspeedy

+0

を使用しています。次に、答えをチェックしてください。それはまさに必要なものです。 – jezrael

答えて

1

scaleの列はcategorical dtypeである必要があります。フィルタリングの後、remove_unused_categories()に電話する必要があります。

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

はい、実際に動作します。早速のご返事ありがとうございます! – x3mspeedy