2015-12-02 33 views
0

在Python 2.7.6和熊貓0.17.0或更新版本,選擇日期欄的位置:#IndexingError:太多的索引器和類型錯誤:不能做切片索引

我提出的時間序列圖。繪製字數v.s.時間。該腳本將讀取twitter數據並計算該單詞在該時間出現的次數。 下面是一個所示例的熊貓表,「per_minute」(第一列是「時間」,第二列是「字計數」。):

print type(per_minute) 

<class 'pandas.core.series.Series'> 

print per_minute 

2015-10-29 01:55:00 1 
2015-10-29 01:56:00 1 
2015-10-29 01:57:00 0 
Freq: T, dtype: float64 

我想選擇的時間列(例如, 「2015-10-29 01:57:00」或「2015-10-29」或「01:57:00」),因此我可以將此時間信息轉儲到matplotlib.pylot刻度標籤。

這個腳本將讀取數百個twitter json文件,所以第一列不會完全是「2015-10-29 01:55:00 1」,這裏只是一個例子。但它將採用「yyyy-mm-dd hh:mm:ss word_count」的風格。

plt.axes().set_xticklabels(dum_the_info_here,rotation='50', fontsize=8) 

我已經嘗試了許多鏡頭:

print per_minute.loc[idx[1:1]] #Print: Series([], dtype: float64) 

print per_minute.ix[:,0] #IndexingError: Too many indexers 

print per_minute.loc[:,per_minute ] #IndexingError: Too many indexers 

print per_minute.loc[1:1] # TypeError: cannot do slice indexing on <class 'pandas.tseries.index.DatetimeIndex'> with these indexers [1] of <type 'int'> 

任何大師能指教?謝謝!

+0

是否'per_minute.loc ['2015年10月29日01: 57']'工作? – EdChum

+0

它將打印出0.0。另外,這個腳本會用不同的時間處理很多不同的文件,所以這個技巧可能不起作用:/ – Chubaka

+0

你指的是什麼技巧?你問如何拉出一個特定的行標籤值,除此之外,你需要編輯你的問題,並清楚地解釋你想要做什麼 – EdChum

回答

1

.plot()Series使用index在默認情況下x軸,並返回一個matplotlib.AxesSubplot,可以在其上.set_ticklabels像這樣:

ax = df.plot() 
ax.set_xticklabels(df.index, rotation=90) 
+0

謝謝!當我放上「ax.set_xticklabels(df.index,rotation = 90)」時,勾號標籤將錯位(「2015-10-29 01:57:00」和「01:57」都會存在,並且會錯位)。如果我只是做「斧= per_minute.plot()」,剔看起來乾淨,漂亮,但我沒有控制我想要的蜱。任何解決方案 – Chubaka

+0

你當然可以改變角度,字體大小和其他參數,90度選項只是爲了說明 - http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_xticklabels。您還可以使用'df.index.apply(lambda x:x.strftime(desired_format)')來更改'DateTimeIndex'的格式 - 例如參見http://www.tutorialspoint.com/python/time_strftime.htm – Stefan

相關問題