2

私はパンダが初めてで、データを時系列オブジェクトに変換する方法を理解するのに苦労しています。実験の開始を基準とした相対時間インデックスがあるセンサー データがあります。これは日付/時刻形式ではありません。私がオンラインで見つけたすべてのドキュメントは、ある種の古いデータで始まっています。私のデータの短いチャンクは次のようになります。

0.000000    49.431958   4.119330    -0.001366   -9.483122E-9
0.025000    49.501745   4.125145    0.004710    2.322330E-8
0.050000    49.479531   4.123294    0.013725    1.185336E-7
0.075000    49.492309   4.124359    0.006082    1.607667E-7
0.325000    49.515702   4.126309    0.024307    9.750522E-7
2.925000    49.437069   4.119756    0.000202    9.148022E-6
3.025000    49.521010   4.126751    0.014313    9.590506E-6
3.425000    49.510001   4.125833    -0.003913   1.075210E-5

時間データは最初の列にあります。私はデータをロードしようとしました:

datalabels= ['time', 'voltage pack', 'av. cell voltage', 'current', 'charge count', 'soc', 'energy', 'unknown1', 'unknown2', 'unknown3']
datalvm= pd.read_csv(dpath+dfile, header=None, skiprows=25, names=datalabels, delimiter='\t', parse_dates={'Timestamp':['time']}, index_col='Timestamp')

しかし、時系列ではなく、インデックス付きの系列を取得するだけです。

どんな助けでも大歓迎です。

乾杯!

4

3 に答える 3

4

タイムスタンプを dateTime オブジェクトに解析して、pandas TimeSeries オブジェクトを構築する必要があります。これには、任意の開始点を選択する必要があります

start = dt.datetime(year=2000,month=1,day=1)
time = datalvm['time'][1:]
floatseconds = map(float,time) #str->float

#floats to datetime objects -> this is you timeseries index
datetimes = map(lambda x:dt.timedelta(seconds=x)+start,floatseconds)

#construct the time series
timeseries = dict() #timeseries are collected in a dictionary
for signal in datalabels[1:]:
    data =map(float,datalvm[signal][1:].values)
    t_s = pd.Series(data,index=datetimes,name=signal)
    timeseries[signal] = t_s

#convert timeseries dict to dataframe
dataframe = pd.DataFrame(timeseries)

timeSeries を作成したら、 resample 関数を使用できます。

dataframe['soc'].resample('1sec')
于 2013-07-09T12:27:30.097 に答える
1

Beau のアプローチはうまく機能しますが、任意の開始点を使用することは避けたいと思います。私は通常 TimedeltaIndex を使用して時系列を作成し、t0 からの時間差についてのみ考えることができるようにします。

time = datalvm['time'][1:]
floatseconds = map(float,time) #str->float
datalvm.index=pd.to_timedelta(floatseconds,unit='s') 
于 2015-12-16T13:29:29.307 に答える
1

cutgroupby (必要に応じてビンを指定できます)、または上記のデータを使用して必要に応じて groupbyを使用してそれを行うことができます (そのため、 を介して読んでいますStringIO)

In [22]: df= pd.read_csv(StringIO(data), header=None, delimiter='\s+')

In [23]: df.columns = ['time','col1','col2','col3','col4']

In [24]: df
Out[24]: 
    time       col1      col2      col3          col4
0  0.000  49.431958  4.119330 -0.001366 -9.483122e-09
1  0.025  49.501745  4.125145  0.004710  2.322330e-08
2  0.050  49.479531  4.123294  0.013725  1.185336e-07
3  0.075  49.492309  4.124359  0.006082  1.607667e-07
4  0.325  49.515702  4.126309  0.024307  9.750522e-07
5  2.925  49.437069  4.119756  0.000202  9.148022e-06
6  3.025  49.521010  4.126751  0.014313  9.590506e-06
7  3.425  49.510001  4.125833 -0.003913  1.075210e-05

In [25]: df.groupby(pd.cut(df['time'],2)).sum()
Out[25]: 
                    time        col1       col2      col3      col4
time                                                               
(-0.00343, 1.712]  0.475  247.421245  20.618437  0.047458  0.000001
(1.712, 3.425]     9.375  148.468080  12.372340  0.010602  0.000029
于 2013-07-08T20:25:11.973 に答える