2017-12-13 4 views
1

私はこのようなデータフレームがあります。整数の列をPythonで標準時の時間に変換する方法は?

BuyTime  ID  SellTime 
94650   1  94651 
94717   1  94817 
120458   2  114119 

に購入時間を、時間の種類を販売するには、整数である。しかし、私は標準時間の日付に変換します。 私はすでに

quote['SellTime'] = pd.to_datetime(quote['SellTime'], unit = 's') 

を使用しますが、必要とされていない時に1970-01-01のようなスタートの年を提供します。 私のデータは次のようにする必要があります:

BuyTime  Id  SellTime 
09:46:50 1  09:46:51 
09:47:17 1  09:48:17 
12:04:58 2  11:41:19 

はEDIT:私はあなたがstringzfillとして必要な場合は、出力が必要だと思う

def format_time(value): 
t2 = str(value) 
if len(t2) == 5: 
    return "0%s:%s:%s" % (t2[0], t2[1:3], t2[3:5]) 
return "%s:%s:%s" % (t2[0:2], t2[2:4], t2[4:6]) 
+0

さらに詳しい情報を提供する必要があるかもしれません:buyTimeとsellTimeの整数値は正確に何を表しますか?真夜中から何秒後?他に何か? – payne

答えて

2

: はまた私のデータのサイズに、この機能の点を使って効率的ではありません位置によって選択のためとstr[]

t1 = quote['BuyTime'].astype(str).str.zfill(6) 
t2 = quote['SellTime'].astype(str).str.zfill(6) 
quote['BuyTime'] = t1.str[0:2] + ':' + t1.str[2:4] + ':' + t1.str[4:6] 
quote['SellTime'] = t2.str[0:2] + ':' + t2.str[2:4] + ':' + t2.str[4:6] 
print (quote) 
    BuyTime ID SellTime 
0 09:46:50 1 09:46:51 
1 09:47:17 1 09:48:17 
2 12:04:58 2 11:41:19 

場合、または必要性python timeszfillによって0を追加datetime Sに変換しtime Sを抽出:stringの出力の

t1 = quote['BuyTime'].astype(str).str.zfill(6) 
t2 = quote['SellTime'].astype(str).str.zfill(6) 
quote['BuyTime'] = pd.to_datetime(t1, format='%H%M%S').dt.time 
quote['SellTime'] = pd.to_datetime(t2, format='%H%M%S').dt.time 
print (quote) 
    BuyTime ID SellTime 
0 09:46:50 1 09:46:51 
1 09:47:17 1 09:48:17 
2 12:04:58 2 11:41:19 

代替strftimeある:

quote['BuyTime'] = pd.to_datetime(t1, format='%H%M%S').dt.strftime('%H:%M:%S') 
quote['SellTime'] = pd.to_datetime(t2, format='%H%M%S').dt.strftime('%H:%M:%S') 
print (quote) 
    BuyTime ID SellTime 
0 09:46:50 1 09:46:51 
1 09:47:17 1 09:48:17 
2 12:04:58 2 11:41:19 
+0

カラムのタイプがdtype( 'O')の場合はどうなりますか? – ary

0

は、日付文字列のみ時/分/秒含有すると仮定すると(及び分/秒は常に2文字ですが、Pythonのモジュロ演算子を使用して文字列を解析するには、次のようにします:

dateStr = '94522' 
dateInt = int(dateStr) 
sec = dateInt % 100 
dateInt = dateInt - sec 
min = dateInt % 10000 
dateInt = dateInt - min 
min /= 100 
hour = dateInt/10000 

newDateStr = '{}:{}:{}'.format(hour, min, sec) 
print 'number={} formatted={}'.format(dateStr, newDateStr) 

これは、5文字と6文字の両方の長い文字列で機能します。

関連する問題