2017-05-28 4 views
0

Mein Pandas-Datenframe enthält zwei Spalten (Serienobjekte). Sie sind von der Forma H: M: S mit Datentypserie. Ich möchte einen elementweisen Unterschied zwischen den beiden Zeitreihen finden, um die Länge des Tages herauszufinden. Das heißt,Wie man auf Serienobjekten des Pandas Datenrahmens operiert?

H2: M2: S2 - H1: M1: S1

Ich bin neu in Python. Irgendwelche Vorschläge?

Hier ist mein Datenrahmen:

df.head() 

UNIXTime Data Time Radiation Temperature Pressure Humidity WindDirection(Degrees) Speed TimeSunRise TimeSunSet 
0 1475229326 9/29/2016 12:00:00 AM 23:55:26 1.21 48 30.46 59 177.39 5.62 06:13:00 18:13:00 
1 1475229023 9/29/2016 12:00:00 AM 23:50:23 1.21 48 30.46 58 176.78 3.37 06:13:00 18:13:00 
2 1475228726 9/29/2016 12:00:00 AM 23:45:26 1.23 48 30.46 57 158.75 3.37 06:13:00 18:13:00 
3 1475228421 9/29/2016 12:00:00 AM 23:40:21 1.21 48 30.46 60 137.71 3.37 06:13:00 18:13:00 
4 1475228124 9/29/2016 12:00:00 AM 23:35:24 1.17 48 30.46 62 104.95 5.62 06:13:00 18:13:00 
print(df.dtypes) 

UNIXTime     int64 
Data      object 
Time      object 
Radiation     float64 
Temperature     int64 
Pressure     float64 
Humidity     int64 
WindDirection(Degrees) float64 
Speed      float64 
TimeSunRise    object 
TimeSunSet     object  
dtype: object 


df.TimeSunSet.__dict__ 
{'_cacher': ('TimeSunSet', 
    <weakref at 0x000000000B5C04F8; to 'DataFrame' at 0x000000000B556438>), 
'_data': SingleBlockManager 
Items: RangeIndex(start=0, stop=32686, step=1) 
ObjectBlock: 32686 dtype: object, 
'_index': RangeIndex(start=0, stop=32686, step=1), 
'_item_cache': {}, 
'_name': 'TimeSunSet', 
'_subtyp': 'series', 
'is_copy': None} 

ich den Unterschied zwischen TimeSunSet - TimeSunRise finden möge. Das ist der Unterschied zwischen der letzten Spalte und der vorletzten Spalte. Ich benutze Python 3.5.1 auf Windows Anaconda.

+0

'dtype' etwas ganz anderes ist. Meinst du "datetime" oder "timedelta" Objekte? –

+0

Zeigen Sie uns das Datenframe ... –

Antwort

1

Ich glaube, Sie to_timedelta Spalten konvertieren und dann abziehen:

df['difference'] = pd.to_timedelta(df['TimeSunSet']) - pd.to_timedelta(df['TimeSunRise']) 
print (df) 
    UNIXTime     Data  Time Radiation Temperature \ 
0 1475229326 9/29/2016 12:00:00 AM 23:55:26  1.21   48 
1 1475229023 9/29/2016 12:00:00 AM 23:50:23  1.21   48 
2 1475228726 9/29/2016 12:00:00 AM 23:45:26  1.23   48 
3 1475228421 9/29/2016 12:00:00 AM 23:40:21  1.21   48 
4 1475228124 9/29/2016 12:00:00 AM 23:35:24  1.17   48 

    Pressure Humidity WindDirection(Degrees) Speed TimeSunRise TimeSunSet \ 
0  30.46  59     177.39 5.62 06:13:00 18:13:00 
1  30.46  58     176.78 3.37 06:13:00 18:13:00 
2  30.46  57     158.75 3.37 06:13:00 18:13:00 
3  30.46  60     137.71 3.37 06:13:00 18:13:00 
4  30.46  62     104.95 5.62 06:13:00 18:13:00 

    difference 
0 12:00:00 
1 12:00:00 
2 12:00:00 
3 12:00:00 
4 12:00:00 
+0

Es scheint zu arbeiten, aber ich brauche die resultierende "Differenz" Datentyp Zahl (nicht Timedelta) – Bala

+0

Ich denke, dass Sie [this] (http://pandas.pydata.org/pandas -docs/stable/timedeltas.html # frequency-conversion) wie '(pd.to_timedelta (df ['TimeSunSet']) - pd.to_timedelta (df ['TimeSunRise']))/np.timedelta64 (1, 'D') 'oder' (pd.to_timedelta (df ['TimeSunSet']) - pd.to_timedelta (df ['TimeSunRise'])). dt.total_seconds() 'siehe http://pandas.pydata.org/pandas-docs /stable/generated/pandas.Series.dt.total_seconds.html – jezrael

+0

Danke. Für mich geht das. – Bala

Verwandte Themen