今回は、以下のPandas DataFrameデータがある前提で説明します。
print(res)
 	time 	                open        high    low      	close     volume
0 	2019-11-04 03:00:00 	108.229 	108.23 	108.216 	108.223 	77.0
ここで注意してほしいのは以下2点です。
- 
timeの列はあくまで時間の数値として存在しており、タイムゾーンの情報が持っていないこと(実際はUTCを表しています)
 - 
indexは定義がいておらず、デフォルトの0~nの並びになっていること
 
そして、今回の目標は、time列の時間をUTCからJSTに直したいことです。
使おうとしているコード(関数)は以下です。
from datetime import datetime, timedelta`
res['time'] = res['time'].tz_convert('Asia/Tokyo')
エラーその1
まず、そのまま上記のコマンドを実施したところで、以下のエラーメッセージが出力。
要するには、indexのtypeが時間ではないので、変換できないらしいです。
TypeError: index is not a valid DatetimeIndex or PeriodIndex 
そこで、下記のコマンドを投入し、元々time列のデータをindex列に移動し、indexのtypeを時間にしました。
res = res.set_index('time')
res.index = pd.to_datetime(res.index)
エラーその2
ただし、ここでもう一度下記のコマンドで変換しようとしたら、違うエラーメッセージが出ました。
どうやら元々の数値にタイムゾーンの情報がないから、変換できないということですね。
res.index = res.index.tz_convert('Asia/Tokyo')
TypeError: Cannot convert tz-naive timestamps, use tz_localize to localize
そこで、まず、indexにある時間のデータをタイムゾーンの情報を付加してからもう一度変換することを試しました。
res.index = res.index.tz_localize('UTC') #タイムゾーンの情報を付加する
見事に変換できました!
res.index = res.index.tz_convert('Asia/Tokyo')
 	                        open    	high    	low     	close  	volume
time 					
2019-11-04 12:00:00+09:00 	108.229 	108.232 	108.216 	108.228 	115.0