2016-08-07 6 views
1

私はそのような.CSVを持っている:pandas.to_datetime:どの形式を選択しますか?

"Date","Time","Open","High","Low","Close","Volume" 
12/30/2002,0930,0.94,0.94,0.94,0.94,571466 

私はpandas.to_datetimeモジュールと「時間」列の値を変換したいのですが、間にセパレータが存在しないので、私は正しいフォーマットが使用することを見つけることができません時間と分。

誰かが私を助けてくれますか?

+0

あなたはすでに試したものを、おそらく言及する必要があります。コードを含む。これは、適切なドキュメントを読むことで解決できる簡単な問題です。 – goncalopp

+0

@goncalopp利用可能なすべての書式のドキュメントを読んでいますが、データに時間と分の区切り記号がないため、適切な書式は見つかりません。私はフォーマットを指定せずにpandas.to_datetimeモジュールに変換しようとしましたが、自動的に完全な間違った時刻とともに汎用日付を入れます。 – ilpomo

答えて

1

を与えるあなたが解析する列のリストを渡すことができますがpassiによって完全datetimeとしてparse_datesのparamにリストのリストをngの:

In [6]: 
import io 
import pandas as pd 
t='''"Date","Time","Open","High","Low","Close","Volume" 
12/30/2002,0930,0.94,0.94,0.94,0.94,571466''' 
df = pd.read_csv(io.StringIO(t), parse_dates=[['Date','Time']], keep_date_col=True) 
df 

Out[6]: 
      Date_Time  Date Time Open High Low Close Volume 
0 2002-12-30 09:30:00 12/30/2002 0930 0.94 0.94 0.94 0.94 571466 

あなたは予想通りdtypesがあることがわかります。

In [7]:  
df.info() 

<class 'pandas.core.frame.DataFrame'> 
RangeIndex: 1 entries, 0 to 0 
Data columns (total 8 columns): 
Date_Time 1 non-null datetime64[ns] 
Date   1 non-null object 
Time   1 non-null object 
Open   1 non-null float64 
High   1 non-null float64 
Low   1 non-null float64 
Close  1 non-null float64 
Volume  1 non-null int64 
dtypes: datetime64[ns](1), float64(4), int64(1), object(2) 
memory usage: 144.0+ bytes 
1

これは動作するはずですが、私は良い方法があるかどうかわからない:

from StringIO import StringIO 

fh = StringIO('''"Date","Time","Open","High","Low","Close","Volume" 
12/30/2002,0930,0.94,0.94,0.94,0.94,571466''') 

df = pd.read_csv(fh, dtype={'Time':object}) 
df['Timestamp'] = pd.to_datetime(df['Date'] + ' ' + df['Time']) 

print df 

出力:

  Date Time Open High Low Close Volume   Timestamp 
0 12/30/2002 0930 0.94 0.94 0.94 0.94 571466 2002-12-30 09:30:00 
+0

あなたは答えに私を打ち負かしました---私はまったく同じことをしました –

+0

私は分かりません。文字列を使用してデータフレームを作成していますが、私にとっては、「日付」は何千もの値(行)を持つ配列(列)です。 fhの中に文字列の代わりに配列を入れるには? – ilpomo

+0

@ilpomo、私の 'fh'は私が持っていないあなたのcsv入力ファイルを置き換えることです。 df = pd.read_csv( '/ path/to/your/csvfile'、dtype = {'Time':オブジェクト}) '、... – Happy001

1

あなたは何の区切り形式を指定することで、そこには存在しないというパンダを伝えることができます日付の。 %H%Mは、Pythonに割り切れない時間があることを伝えます。たとえば、除算値が:の場合は、format='%H:%M'を使用します。

すべてを読み込んで、データフレームがdfとしてロードされていると仮定します。

from pandas import pandas 

# file loading and such 

asset['Date'] = pandas.to_datetime(asset['Date']) 
asset['Time'] = pandas.DatetimeIndex(pandas.to_datetime(asset['Time'], format = '%H%M')).time 

あなたにPythonの3人については

 Date  Time Open High Low Close Volume 
0 2002-12-30 09:30:00 0.94 0.94 0.94 0.94 571466 

与える:

df['Time'] = pd.to_datetime(df['Time'], format='%H%M').dt.time 

はあなたに

  Date  Time Open High Low Close Volume 
0 12/30/2002 09:30:00 0.94 0.94 0.94 0.94 571466 
+0

私のコードは少し異なります。 >データロード asset = pandas.DataFrame(pandas.read_csv( 'file_path /%s'%symbol、sep = '、'、decimal = ')'')) アセット['Date'] = pandas.to_datetime(アセット['Date']) アセット['Time'] = pandas.to_datetime(asset ['Time']、format = '% H%M ') なぜ最後に.dt.timeを使用していますか?あなたのコードをコピーするとSpyder IDEが私に "'Series'オブジェクトに 'datetime'という属性がないというエラーを返します。 とにかく、あなたのコードは私の 'Time'列(1900-01-01 09:30:00)に一般的な日付を適用します。 – ilpomo

+0

ああ!私はあなたにPython 3のソリューションを与えました。私は終わりに.dt.timeを入れて時間を取って、あなたの 'Time'列にジェネリック日付を持たないようにします。あなたはasset ['Time'] = pandas.DatetimeIndex(pandas.to_datetime(asset ['Time']、format = '%H%M'))時間を代わりに使うことができますか?私は両方のpythonバージョンにも解決策を持たせるために私のソリューションを更新しました。 – Aur

関連する問題