2017-07-16 11 views
0

をはtimedeltaの引数としてリストを渡す:私は、次のようパンダにおけるデータフレーム(df_logs)を持っている

name phone_number call_duration 
Ana 4455533422 38 
Mark 4452341115 300 
Susan 33489982  120 

をcall_duration列が秒単位で表され、私は分に、この列のすべての値を変換したいです。

これを行うにはtimedeltaオブジェクトを使いたかったのですが、指定された秒数の代わりに値のリストを渡す方法はわかりません。これに代えて

time = str(datetime.timedelta(seconds = 300)) 

私はこのように私の「call_duration」欄に成功せず、それぞれの値を渡そうとしました:

df_logs = df_logs['call_duration'].values.astype(int) 

time = str(datetime.timedelta(seconds = [i for i in df_logs])) 

time = str(datetime.timedelta(seconds = *df_logs)) 

私は私の「call_durationを変換する方法を知りたいです'秒から数分。

ありがとうございます。

+0

ご希望の出力データ・セットを投稿することができますか? – MaxU

答えて

2

IIUC:

In [77]: df['new'] = pd.to_timedelta(df.call_duration, unit='s') 

In [78]: df 
Out[78]: 
    name phone_number call_duration  new 
0 Ana 4455533422    38 00:00:38 
1 Mark 4452341115   300 00:05:00 
2 Susan  33489982   120 00:02:00 

In [79]: df.dtypes 
Out[79]: 
name      object 
phone_number    int64 
call_duration    int64 
new    timedelta64[ns] # <---- 
dtype: object 

UPDATE:

In [93]: df['new'] = (df.call_duration/60).round().astype(int) 

In [94]: df 
Out[94]: 
    name phone_number call_duration new 
0 Ana 4455533422    38 1 
1 Mark 4452341115   300 5 
2 Susan  33489982   120 2 

アップデート2:

In [109]: df 
Out[109]: 
    name phone_number call_duration 
0 Ana 4455533422    38 
1 Mark 4452341115   300 
2 Susan  33489982   120 
3 Max  123456789   564 

In [110]: df['new'] = np.ceil(df.call_duration/60).astype(int) 

In [111]: df 
Out[111]: 
    name phone_number call_duration new 
0 Ana 4455533422    38 1 
1 Mark 4452341115   300 5 
2 Susan  33489982   120 2 
3 Max  123456789   564 10 
+0

ありがとうございます、round()メソッドでこの数値を丸めることは可能ですか? Ex。任意の秒数が1分に丸められた場合。出力:38秒= 1、05:10 = 6 ...など – Ana

+0

@Ana、結果として得られるDFには 'dtype'がありますか? - timedelta、' float'、 'int'? – MaxU

+0

理想的には、私はちょうど分数を切り上げてコールレートで乗算することができます。ありがとうございました – Ana

関連する問題