2016-11-11 1 views
1

나는 DF 같이 찾고 있습니다초에 Timedelta 변환 - 오류

{'avg_time_diff': {22836: Timedelta('0 days 00:02:04.810879'), 
    23533: Timedelta('0 days 00:03:35.242784'), 
    45297: Timedelta('0 days 00:04:02.764130'), 
    56232: Timedelta('0 days 00:02:48.427043'), 
    92306: Timedelta('0 days 00:00:18.396753')}, 
'count': {22836: 1671, 23533: 879, 45297: 859, 56232: 1130, 92306: 7803}, 
'ipAddress': {22836: u'178.73.210.51', 
    23533: u'185.125.168.216', 
    45297: u'45.32.241.181', 
    56232: u'77.66.48.87', 
    92306: u'90.180.104.16'}} 

내가 초에 숫자 양에 avg_time_diff 열을 변환 할.

나는 다른 방법을 시도, 즉 :

df_diff['avg_time_diff'].dt.seconds 

하지만 난 얻을 :

AttributeError: Can only use .dt accessor with datetimelike values 

그것은 무엇을 의미 하는가? 나를 위해

답변

1

은 완벽하게 작동합니다 :

d = {'avg_time_diff': {22836: pd.Timedelta('0 days 00:02:04.810879'), 
    23533: pd.Timedelta('0 days 00:03:35.242784'), 
    45297: pd.Timedelta('0 days 00:04:02.764130'), 
    56232: pd.Timedelta('0 days 00:02:48.427043'), 
    92306: pd.Timedelta('0 days 00:00:18.396753')}, 
'count': {22836: 1671, 23533: 879, 45297: 859, 56232: 1130, 92306: 7803}, 
'ipAddress': {22836: u'178.73.210.51', 
    23533: u'185.125.168.216', 
    45297: u'45.32.241.181', 
    56232: u'77.66.48.87', 
    92306: u'90.180.104.16'}} 

df_diff = pd.DataFrame(d) 
print (df_diff) 
     avg_time_diff count  ipAddress 
22836 00:02:04.810879 1671 178.73.210.51 
23533 00:03:35.242784 879 185.125.168.216 
45297 00:04:02.764130 859 45.32.241.181 
56232 00:02:48.427043 1130  77.66.48.87 
92306 00:00:18.396753 7803 90.180.104.16 

print (df_diff.dtypes) 
avg_time_diff timedelta64[ns] 
count      int64 
ipAddress     object 
dtype: object 

print (df_diff.info()) 
avg_time_diff 5 non-null timedelta64[ns] 
count   5 non-null int64 
ipAddress  5 non-null object 
dtypes: int64(1), object(1), timedelta64[ns](1) 
memory usage: 160.0+ bytes 
None 
print (df_diff['avg_time_diff'].dt.seconds) 
22836 124 
23533 215 
45297 242 
56232 168 
92306  18 
Name: avg_time_diff, dtype: int64 

print (df_diff['avg_time_diff'].dt.total_seconds()) 
22836 124.810879 
23533 215.242784 
45297 242.764130 
56232 168.427043 
92306  18.396753 
Name: avg_time_diff, dtype: float64 

print (df_diff['avg_time_diff']/np.timedelta64(1, 's')) 
22836 124.810879 
23533 215.242784 
45297 242.764130 
56232 168.427043 
92306  18.396753 
Name: avg_time_diff, dtype: float64 

print (df_diff['avg_time_diff'].astype('timedelta64[s]')) 
22836 124.0 
23533 215.0 
45297 242.0 
56232 168.0 
92306  18.0 
Name: avg_time_diff, dtype: float64 

문제가 to_timedelta 변환에 의해 해결되었다 :

df_diff['avg_time_diff'] = pd.to_timedelta(df_diff['avg_time_diff']) 
+0

음, 문제는 또한 샘플입니까? 'df.info' 란 무엇입니까? – jezrael

+1

df_diff [ 'avg_time_diff'] = pd.to_timedelta (df_diff [ 'avg_time_diff'])에 의해'dtype''timedelta'가 아니라면 timedelta로 변환해야 할 수도 있습니다. – jezrael

+0

다른 해결책을 확인하십시오. – jezrael