2017-03-08 32 views
2

大熊貓系列是什麼造成這種情況?熊貓matplotlib情節有奇怪的文物

plt.plot(df["Column"].as_matrix()) 

good plot


plt.plot(df["Column"]) 

bad plot


df["Column"].plot() 

其實也有類似的文物,但不太一樣的情節。

+0

,如果你提供的樣本數據可能會有幫助。我注意到兩種方法之間的x軸範圍發生了變化。我在考慮'熊貓系列'的索引可能會導致不同的行爲 –

回答

1

比方說,你有以下數據框

x = [2,1,3,6,5,6,7] 
y = [1,2,5,1,1,6,1] 
df = pd.DataFrame({"y" : y }, index=x) 

然後調用
plt.plot(df["y"].as_matrix())相當於plt.plot(y)其反對它自己的指數(從0開始,遞增1)繪製只有y值。
相比之下,
plt.plot(df["y"])等價於plt.plot(x,y),它將y的值與數據幀的索引進行比較。如果這些指數沒有排序,則情節看起來會失真。 (大熊貓的命令也是如此。)

這是一個完整的例子。

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.DataFrame({"y" : [1,2,5,1,1,6,1] }, index=[2,1,3,6,5,6,7]) 

plt.plot(df["y"].as_matrix(), lw=3, label='plt.plot(df["y"].as_matrix())') 
plt.plot(df["y"], lw=3, label='plt.plot(df["y"])') 
df["y"].plot(ax=plt.gca(), linestyle="--", color="k", label='df["y"].plot()') 

plt.legend() 
plt.show() 

enter image description here

最簡單的解決方案,以便能夠使用任何上述方法是重新索引數據框

df = df.reset_index() 
+0

這或多或少發生了什麼。我已經對我的數據進行了二次採樣並在另一列上進行了排序,這使我的索引倍增。我假定系列中的「自然」索引就像數組索引,但顯然不是。出於好奇,以這種方式進行索引的原因是什麼,而不僅僅是[0,series.size)...? – Scott

+1

原因當然是每個條目都應該有自己定義的索引(否則就沒有索引的理由)。這允許例如在排序或過濾之後明確地識別數據。您可以使用'df = df.reset_index()'來爲數據框新建索引。 – ImportanceOfBeingErnest

+0

...就像在關係數據庫中一樣。 – Scott