2017-12-20 1 views
1

일일 언급 된 날과 출판 된 날 간의 차이를 계산하고 싶습니다. 그래서 Pandas Timedelta는 긍정적 인면에서 부정적인면, 한계점을 극복하는 방법

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')}]) 

가 지금은 "언급 날짜"와 "발행 날짜"사이의 차이를 계산하려면 다음 DataFrame 있습니다.

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] 

여기서 알 수 있듯이 행 0과 4에 대한 응답이 잘못되었습니다. 그 차이는 모든 곳에서 긍정적이어야합니다.

값으로 값만 다른 경우 응답은 양수입니다. 아래 코드를 참조하십시오.

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

그러나 결과는 다른 유형입니다.

그러나 제한적으로 타임 스탬프 ('1677-09-21 00 : 12 : 43.145225')는 https://pandas.pydata.org/pandas-docs/stable/timeseries.html#timestamp-limitations에 따라 허용되지 않습니다. 제 경우가 아니어야합니다.

  1. 가 어떻게 "잘못"행동을 극복하기 :

    나는이 개 질문이?

  2. 이것은 팬더 pd.Timedelta의 버그로 간주됩니까? 아니면 이 다소 '정상적인'행동입니까?

업데이트 : pd.Timedelta의 제한 사항을 발견했습니다. https://pandas.pydata.org/pandas-docs/stable/timedeltas.html#timedelta-limitations 첫 번째 질문이 남아 있습니다. 이 한계를 극복하는 방법? 고맙습니다! 타임 스탬프의 제한이 있기 때문에

답변

0

, 반복 즉

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 

이 버그 고려되어야한다 빼기? : 팬더 커뮤니티가 구체적으로 언급하기 때문에 아니, 팬더 이후

는 나노초 해상도에서 타임 스탬프를 나타내며, 64 비트 정수를 사용하여 표시 할 수있는 시간 범위는 약 584년으로 제한됩니다. 벡터화 된 작업을위한 합법적 인 이유

관련 문제