chopin_is_the_best
chopin_is_the_best

Reputation: 2101

Convert Timedelta to seconds - error

I have a df looking like:

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

I want to convert the avg_time_diff column into numeric amount in seconds.

I tried different ways, ie:

df_diff['avg_time_diff'].dt.seconds

but I get:

AttributeError: Can only use .dt accessor with datetimelike values

What does it mean?

Upvotes: 1

Views: 1626

Answers (1)

jezrael
jezrael

Reputation: 862651

For me it works perfectly:

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

Problem was solved by converting to_timedelta:

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

Upvotes: 1

Related Questions