1

インデックスとデータのペアを含む辞書を渡すことで、パンダシリーズを構築しようとしています。そうこうしているうちに、面白い癖に気がつきました。データ ペアのインデックスが非常に大きな整数の場合、データは NaN として表示されます。これは、インデックス値のサイズを小さくするか、単一の辞書ではなく 2 つのリストを使用してシリーズを作成することで修正されます。マイクロ秒-since-1970 形式のタイムスタンプを使用しているため、大きなインデックス値があります。私は何か間違ったことをしていますか、それともこれはバグですか?

次に例を示します。

import pandas as pd

test_series_time = [1357230060000000, 1357230180000000, 1357230300000000]
test_series_value = [1, 2, 3]
series = pd.Series(test_series_value, test_series_time, name="this works")

test_series_dict = {1357230060000000: 1, 1357230180000000: 2, 1357230300000000: 3}
series2 = pd.Series(test_series_dict, name="this doesn't")

test_series_dict_smaller_index = {1357230060: 1, 1357230180: 2, 1357230300: 3}
series3 = pd.Series(test_series_dict_smaller_index, name="this does")

print series
print series2
print series3

そして出力:

1357230060000000    1
1357230180000000    2
1357230300000000    3
Name: this works

1357230060000000   NaN
1357230180000000   NaN
1357230300000000   NaN
Name: this doesn't

1357230060    1
1357230180    2
1357230300    3
Name: this does

それで、これはどうですか?

4

1 に答える 1

0

あなたは 32 ビットを使っているに違いありません。64 ビットではこれで問題なく動作します。0.10.1 では、辞書による作成のデフォルトは、システムに依存するデフォルトの numpy 整数作成を使用することです (たとえば、32 ビットでは int32、64 ビットでは int64)。dtype がオーバーフローしているため、予期しない動作が発生します。

0.11 (今週公開予定!) では、システムに関係なく int64 を作成するようにデフォルト設定されるため、これは機能します。

In [12]: np.iinfo(np.int32).max
Out[12]: 2147483647

In [13]: np.iinfo(np.int64).max
Out[13]: 9223372036854775807

マイクロ秒をタイムスタンプに変換します (1000 を掛けて、タイムスタンプが整数入力として受け入れるナノ秒にします)。

In [5]: pd.Series(test_series_value, 
        [ pd.Timestamp(k*1000) for k in test_series_time ])
Out[5]: 
2013-01-03 16:21:00    1
2013-01-03 16:23:00    2
2013-01-03 16:25:00    3
于 2013-04-10T01:16:20.403 に答える