2016-12-31 8 views
2

私はこのようなパンダにいくつかのデータを読み込んでいます。私は本当に "月"(1-12)と "日付"(1-31)を1つに縫い合わせているのが大好きです。手動で反復することなく、パンダのDateTimeに変換する処理時間の値は?

pandas.read_csv("mysheet.csv",parse_dates=[["Month","date"]]) 

データは、別個の月、日、時間列のタイムスタンプがあり、時間がない描写なし先行ゼロと基本的にHHMMあります。

時間でインデックスを作成する必要があるため、すべてを日時に変換しようとしていますが、行ごとに手動で繰り返しは必要ありません。

def add_timestamps(data): 
    time = data["time"] 
    minutes = time % 100 
    hours = int(time/100) 
    data["timestamp"] = "2012-" + str(data["Month"]) + "-" + str(data["date"] + " " + str(hours) + ":" + str(minutes)) 

は^これは私が正しい日付と時刻の組み合わせフィールドにすべてを取得しようとする使用している私のコードですので、私はちょうど

pandas.to_datetime(data["timestamp"],format="%Y-%m-%d %H:%M") 

を行うことができますし、それが、私で行うこと私はそれがシリーズ全体をその文字列に設定したいと思うところではなく、この結合された文字列に各タイムスタンプのFIELDを設定するようにどのように伝えなければならないのかについて完全な喪失にあります。

はまた、私はこのエラーを取得する:

**TypeError: cannot convert the series to <class 'int'>** 

は、私はそれが私はどちらかint型にそれを設定しようとしていると考える理由はわかりません。どんな助けや方向性もありがとう!

+0

(小)サンプルデータフレームを実際のデータで表示してください。 –

+0

@JCooking、あなたは2つの答えを持っています。灰色のチェックマークをクリックして緑色に輝くように、最高の回答を受け入れることを検討してください。[詳細はこちら](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer -work)これはあなたの質問が首尾よく解決されたことを示します。 –

答えて

1

あなたはHHMMのために2最初と最後の2つの文字を選択するためのindexing with strを使用することができます。

data = pd.DataFrame({'Month':[1,2,3], 
        'date':[4,5,26], 
        'time':['1350','1012','0348']}) 

print (data) 
    Month date time 
0  1  4 1350 
1  2  5 1012 
2  3 26 0348 

s = '2012' + '-' + data["Month"].astype(str) \ 
      + '-' + data["date"].astype(str) + ' ' \ 
       + data['time'].str[:2] + ':' \ 
       + data['time'].str[2:] 
print (s) 
0  2012-1-4 13:50 
1  2012-2-5 10:12 
2 2012-3-26 03:48 
dtype: object 

data['timestamp'] = pd.to_datetime(s) 
#if necessary add format 
#data['timestamp'] = pd.to_datetime(s,format="%Y-%m-%d %H:%M") 
print (data) 
    Month date time   timestamp 
0  1  4 1350 2012-01-04 13:50:00 
1  2  5 1012 2012-02-05 10:12:00 
2  3 26 0348 2012-03-26 03:48:00 
+0

ご回答いただきありがとうございます。残念ながら先行ゼロはありませんでしたので、0348は348としてファイルに含まれていましたが、あなたの返信は私に素晴らしいアイデアを与えました! :) – JCooking

2

read_csvで提供キーワード引数を使って自分自身を読みながら、一度にそれをすべてを行うことができます。

# using the same data per @jezrael 
data = StringIO(
''' 
Month date time 
1  4 1350 
2  5 1012 
3 26 0348 
''') 

# function to use for processing string columns to datetime instances 
date_parse = lambda x: '{} {}'.format(2012, x) 
# create a dict mapping of columns to be consolidated into a single timestamp column 
date_col_dict = {'timestamp': ['Month', 'date', 'time']} 
# `keep_date_col=True` to keep the month/date/time columns and not drop them 
kwds = dict(parse_dates=date_col_dict, keep_date_col=True, date_parser=date_parse) 
df = pd.read_csv(data, delim_whitespace=True, **kwds) 
#     ^----------^ replace this part with your csv filename 

enter image description here

を確認してください10:

df.dtypes 

timestamp datetime64[ns] 
Month    object 
date     object 
time     object 
dtype: object 
+1

ありがとうございました!これはうまくいきましたが、ちょっとした変更を加えれば、時間を前処理する方法もわかりました – JCooking

関連する問題