2017-12-20 14 views
1

Ich möchte den Unterschied zwischen dem Tag smt, der erwähnt wurde, und dem Tag, an dem es veröffentlicht wurde, berechnen. So habe ich den nächsten DatenrahmenPandas Timedelta ist negativ, wo es positiv sein sollte, wie man die Beschränkungen überwinden kann

df_test= pd.DataFrame([{'Mention Date': pd.Timestamp('2015-09-17 12:47:06'), 
         'Publication Date': pd.Timestamp('1684-01-01 00:00:00')}, 
         {'Mention Date': pd.Timestamp('2015-09-17 12:47:06'), 
         'Publication Date': pd.Timestamp('2013-01-01 00:00:00')}, 
         {'Mention Date': pd.Timestamp('2015-09-17 12:47:06'), 
         'Publication Date': pd.Timestamp('1724-01-01 00:00:00')}, 
         {'Mention Date': pd.Timestamp('2015-01-01'), 
         'Publication Date': pd.Timestamp('1722-09-22 00:12:43.1453')}, 
         {'Mention Date': pd.Timestamp('2015-01-01'), 
         'Publication Date': pd.Timestamp('1722-09-22 00:00:00')}]) 

Jetzt habe ich den Unterschied zwischen „Mention Date“ berechnet werden soll und „Erscheinungsdatum“.

print df_test["Mention Date"] - df_test["Publication Date"] 

0 -92350 days +13:12:32.290448 
1    989 days 12:47:06 
2   106545 days 12:47:06 
3  106751 days 23:47:16.854700 
4 -106752 days +00:25:26.290448 
dtype: timedelta64[ns] 

Wie Sie sehen können, ist die Antwort falsch für Zeile 0 und 4. Die Differenz sollte überall positiv sein.

Wenn ich Unterschied nur Wert nach Wert mache, dann ist die Antwort positiv. Siehe den folgenden Code.

print df_test.loc[0]["Mention Date"] - df_test.loc[0]["Publication Date"] 
print df_test.loc[3]["Mention Date"] - df_test.loc[3]["Publication Date"] 
print type(df_test.loc[0]["Mention Date"] - df_test.loc[0]["Publication Date"]) 

121154 days, 12:47:06 
106751 days 23:47:16.854700 
<type 'datetime.timedelta'> 

Aber das Ergebnis ist dann von anderer Art.

Limit ist jedoch Timestamp ('1677-09-21 00: 12: 43.145225') nach https://pandas.pydata.org/pandas-docs/stable/timeseries.html#timestamp-limitations, es sollte nicht mein Fall sein.

Ich habe 2 Fragen:

  1. Wie das "falsche" Verhalten zu überwinden?
  2. Sollte dies ein Fehler in der Pandas pd.Timedelta sein? Oder ist das eher ein "normales" Verhalten?

Update: Ich die Begrenzung für pd.Timedelta gefunden https://pandas.pydata.org/pandas-docs/stable/timedeltas.html#timedelta-limitations Die erste Frage bleibt. Wie überwinde ich diese Einschränkung? Vielen Dank!

Antwort

0

Da die Begrenzung der Zeitstempel ist, subtrahieren mit Iteration heißt

df_test.apply(lambda x : x['Mention Date'] - x['Publication Date'],1) 

0   121154 days, 12:47:06 
1    989 days 12:47:06 
2   106545 days 12:47:06 
3 106751 days 23:47:16.854700 
4   106752 days, 0:00:00 

Sollte ein Fehler in Betracht gezogen werden? Nein, da die Pandas Gemeinschaft ausdrücklich erwähnt,

Da Pandas stellt Zeitstempel in Nanosekunde Auflösung, die Zeitspanne, die dargestellt werden kann, eine 64-Bit-Integer verwendet, wird auf etwa 584 Jahre beschränkt:. Es ist ein berechtigter Grund für eine vektorisierte Operation

Verwandte Themen