2016-11-11 54 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'])' – jezrael

+0

如果不是'dtype''timedelta',可能需要轉換爲timedelta請檢查另一個解決方案。 – jezrael