3

pandas データフレームの適切な時間インデックスを取得するのに少し問題があります。

import pandas as pd
from datetime import strptime
import numpy as np

stockdata = pd.read_csv("/home/stff/symbol_2012-02.csv", parse_dates =[[0,1,2]])
stockdata.columns = ['date_time','ticker','exch','salcond','vol','price','stopstockind','corrind','seqnum','source','trf','symroot','symsuffix']

問題は、年/月/日、時/分/秒、ミリ秒の最初の 3 つの列に時間が含まれていることだと思います。また、正午より前の場合、時/分/秒の列は最初のゼロを削除します。

print(stockdata['date_time'][0])
20120201 41206 300

print(stockdata['date_time'][50000])
20120201 151117 770

理想的には、read_csv 関数の converters 引数によって呼び出される独自の関数を定義したいと考えています。

4

1 に答える 1

2

csv次のようなファイルがあるとします。

date,time,milliseconds,value
20120201,41206,300,1
20120201,151117,770,2

次に、、およびメソッドのパラメータを使用してparse_dates、次のような時間インデックスを使用してを作成できます。index_colsdate_parserread_csvpandas DataFrame

import datetime as dt
import pandas as pd
parse = lambda x: dt.datetime.strptime(x, '%Y%m%d %H%M%S %f')
df = pd.read_csv('test.csv', parse_dates=[['date', 'time', 'milliseconds']],
                 index_col=0, date_parser=parse)

これにより、次のようになります。

                            value
date_time_milliseconds           
2012-02-01 04:12:06.300000      1
2012-02-01 15:11:17.770000      2

そしてdf.index

<class 'pandas.tseries.index.DatetimeIndex'>
[2012-02-01 04:12:06.300000, 2012-02-01 15:11:17.770000]
Length: 2, Freq: None, Timezone: None

この回答は、ここで提案されている同様のソリューションに基づいています。

于 2013-02-28T16:44:22.243 に答える