2016-11-11 28 views
2

年、月、日、時および分の列を含む.csvファイルから読み取ったパンダデータフレームにnp.datetime64列を追加し、インデックスとして使用したいとします。私は、別々の列を組み合わせてdatetime文字列の列を作成しました。pandasデータフレーム列をnp.datetime64に変換

import numpy as np 
import pandas as pd 
filename = 'test.csv' 
df = pd.read_csv(filename, header=0, usecols = [2,3,4,5,6], names = ['y','m','d','h','min'],dtype = {'y':'str','m':'str','d':'str','h':'str','min':'str'}) #read csv file into df 
df['datetimetext'] = (df['y']+'-'+df['m']+'-'+df['d']+' '+df['h']+':'+df['min']+':00') 

ので、データフレームは、次のようになります。

  y m d h min datetimetext 
0  1993 09 06 00 30 1993-09-06 00:30:00 
1  1993 09 06 01 00 1993-09-06 01:00:00 
2  1993 09 06 01 30 1993-09-06 01:30:00 
3  1993 09 06 02 00 1993-09-06 02:00:00 
4  1993 09 06 02 30 1993-09-06 02:30:00 
...... 

今、私は私が

df['datetime'] = np.datetime64(df['datetimetext']) 

を書きたいnp.datetime64

としてフォーマット日時に列を追加したいが、エラーが発生する

ValueError: Could not convert object to NumPy datetime 

データフレームの各行を反復処理する必要がありますか、より洗練されたソリューションがありますか?あなたが持っているものと

答えて

3

最も簡単な方法は、あなたの列が適切に命名されている場合は、名前の列から直接変換することができ、しかし

df['datetime'] = pd.to_datetime(df['datetimetext']) 

LINK TO DOCS

です。私は次の変換を実行し、ワンショット

df.index = pd.to_datetime(df) 
df 

enter image description here

+0

にインデックスに割り当てますrename

m = dict(y='year', m='month', d='day', h='h', min='m') # rename columns and get rid of datetimetext df = df[['y', 'm', 'd', 'h', 'min']].rename(columns=m) df 

enter image description here

を使用して、列の名前を変更し、これは代わりに、今の辞書ですデータフレームの?私は追加のラベル付きカラムを持っているので、データフレームを好むでしょう – doctorer

+0

'm'はあなたのカラムの名前を変換のための適切な名前にマップする辞書です...私はポストを更新します。 1分 – piRSquared

+0

美しい、ありがとう。元の 'pd.read_csv'行の列名を変更したので、あなたの解決策は' df.index = pd.to_datetime(df [['年'、 '月'、 '日'、 'h '、' m ']]) '(私は実際のコードに追加の列があるので、ここに列挙しておきました)。ありがとう – doctorer

関連する問題