1

データファイルを解析するとき、次のような秒があります。

1.296999421

現在、次のようにパンダに表示されています。

<Timestamp: 2011-04-16 00:00:01.296999>

「datetime64 [ns]」のdtypeを使用しますが、元の測定にはミリ秒の精度しかないことがわかっています。

ミリ秒の精度のみを使用するパンダ時系列を生成することは可能ですか? 私の目標の 1 つは、ミリ秒カウンターに基づいて異なる時系列を正確に結合することです。

だから私はただ持っていたい

<Timestamp: 2011-04-16 00:00:01.297>

このタイムスタンプを他の時系列で正確に一致させることができます。

つまり、「datetime [ms]」はありますか?また、非連続のタイムスタンプをそれに変換するにはどうすればよいですか?

4

2 に答える 2

2

HYRY の解決策は正しいが、パンダは対処方法がわからない

最新の pandas 0.11-dev を使用すると、timedeltas が完全にサポートされるようになりました

http://pandas.pydata.org/pandas-docs/dev/timeseries.html#time-deltas

In [25]: a = np.random.rand(8)*10

In [26]: a.sort()

In [27]: a
Out[27]: 
array([ 0.72062151,  1.02039858,  2.07877837,  3.94256869,  5.5139672 ,
    6.80194715,  6.83050498,  8.63027672])

# trick is to pass a nanosecond value directly
# pandas keeps all values internally as timedelta64[ns]
In [5]: pd.Series((np.round(a*1000)/1000)*1e9,dtype='timedelta64[ns]')
Out[5]: 
0   00:00:00.721000
1   00:00:01.020000
2   00:00:02.079000
3   00:00:03.943000
4   00:00:05.514000
5   00:00:06.802000
6   00:00:06.831000
7   00:00:08.630000
dtype: timedelta64[ns]

そして、これがタイムスタンプとして必要な場合

In [8]: pd.Series((np.round(a*1000)/1000)*1e9,dtype='timedelta64[ns]') + pd.Timestamp('20110406')
Out[8]: 
0   2011-04-06 00:00:00.721000
1   2011-04-06 00:00:01.020000
2   2011-04-06 00:00:02.079000
3   2011-04-06 00:00:03.943000
4   2011-04-06 00:00:05.514000
5   2011-04-06 00:00:06.802000
6   2011-04-06 00:00:06.831000
7   2011-04-06 00:00:08.630000
dtype: datetime64[ns]
于 2013-03-08T12:39:03.903 に答える
1

1.296999421に変換する方法がわかりません<Timestamp: 2011-04-16 00:00:01.296999>。次の手順でdatetime64[ms]配列を作成できると思います。

a = np.random.rand(100)*10
a.sort()
t = np.array(np.round(a*1000), dtype="timedelta64[ms]") + np.datetime64("2012-03-01")

t次に、DataFrameのインデックスとして使用できます。パンダはこれをに変換しtimedelta64[ns]ます。

于 2013-03-08T12:06:54.230 に答える