2017-02-03 1 views
1

これはいつも私のために働いていましたが、数日前から私は奇妙な結果を得ています。ただ返すpandas to_timedelta関数がデータを0に変換するようです

my_list = [1,2,3,4,5] 
my_series = pd.Series(my_list) 
print pd.to_timedelta(my_series) 

0 00:00:00:000000 
1 00:00:00:000000 
2 00:00:00:000000 
3 00:00:00:000000 
4 00:00:00:000000 

は、誰もが何が起こっているかを教えてもらえますか?

EDIT: 私の実際のコードでは、私はto_timedelta関数を呼び出す前に

df['col'].astype(int, inplace = True) 

を使用して整数に私の(すぐにはtimedeltaされるように)、カラムを変えました。私は本当にすべきだった

new_col = pd.to_numeric(df['col']) 

そしてnew_colのto_timedeltaを呼び出します。たぶん誰かがこれがどうして起こるのかを明らかにすることができます。

答えて

4

to_timedeltaのデフォルトの単位は、「NS」であり、マニュアルまたは関数プロトタイプを参照してください。

def to_timedelta(arg, unit='ns', box=True, errors='raise', coerce=None): 

だからあなただけの生成1〜5 naosecondsデルタ、およびディスプレイはその深い行きません。

間違ったユニットを選んでいる可能性がありますが、ユニット=「あなたにとって役に立つもの」を関数に渡している可能性があります。

編集適切な単位を使用することにより

よりOPのコメントを説明するために、あなたが期待するものを手に入れる:

pd.to_timedelta(my_series, unit='D') 
Out[415]: 
0 1 days 
1 2 days 
2 3 days 
3 4 days 
4 5 days 
dtype: timedelta64[ns] 

はまだそのシリーズ内のオブジェクトの種類は内部ですtimedelta[ns]ですオブジェクトの表現。括弧内のnsは、timedeltaオブジェクトがナノ秒までの精度スケールを持つことを思い出させるためのものです。

私は最初の要素の生の内部値を取る場合、私はナノ秒を見つける:

pd.to_timedelta(my_series, unit='D')[0].delta 
Out[425]: 86400000000000 
+0

これは確かにそうである、最小値は、この – EdChum

+1

@EdChumを登録するはtimedeltaために1000年のようになります。ほか、 "display"ではなく、 "register"であり、 'pd.to_timedelta(my_series).dt.nanoseconds'にまだあります。 :-) – DSM

+0

@DSMああ、それは本当ですtimedelta属性について考えずに出力を見ていたのです – EdChum

関連する問題