2017-07-16 1 views
0

J'ai dataframe (df_logs) en pandas géants comme suit:Passer une liste comme argument pour timedelta

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

La colonne call_duration est exprimé en secondes et je voudrais convertir toutes les valeurs dans cette colonne à quelques minutes . Pour ce faire, je voulais utiliser l'objet timedelta mais je ne sais pas comment passer une liste de valeurs au lieu d'une quantité donnée de secondes.

Au lieu de cela:

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

J'ai essayé de passer sans succès chaque valeur dans mon « call_duration » colonne comme ceci:

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)) 

Je voudrais savoir comment convertir mon « call_duration De quelques secondes à quelques minutes.

Merci.

+0

Pouvez-vous poster vos données de sortie souhaitées REGLER? – MaxU

Répondre

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 

MISE À JOUR:

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 

MAJ2:

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

Merci, est-il possible d'arrondir ce nombre avec la méthode round()? Ex. s'il y a un nombre de secondes arrondi à 1 minute. Sortie: 38 secondes = 1, 05:10 = 6 ... etc – Ana

+0

@Ana, quel 'dtype' voulez-vous avoir dans le DF résultant -' timedelta', 'float',' int'? – MaxU

+0

Idéalement un int je veux juste avoir arrondi nombre de minutes afin que je puisse les multiplier par un taux d'appel. Merci – Ana