2016-04-04 24 views
1

kullanılarak saat dönüşüm zaman aşağıdaki veri çerçevesi, df:Pandalar Lambda

no.  site_number  date    time Class Speed_KPH 
0     11 2016-02-27 00:00:13.0000000 Short   43 
1     11 2016-02-27 00:02:15.0000000 Short   45 
2     11 2016-02-27 00:00:28.0000000 Short   31 
3     11 2016-02-27 00:03:28.0000000 Short   31 

bunun belirli bir saat sonunda verir, öyle ki, time sütunundan, time_slot yeni bir sütun oluşturmak isteyen .

no.  site_number  date    time Class Speed_KPH  Hour_slot 
    0     11 2016-02-27 00:00:13.0000000 Short   43 1 
    1     11 2016-02-27 00:02:15.0000000 Short   45 3 
    2     11 2016-02-27 00:00:28.0000000 Short   31 1 
    3     11 2016-02-27 00:03:28.0000000 Short   31 4 

bir saat içine zaman dönüştürmek için bir fonksiyon tanımlandığı gibidir ve daha sonra, time_slot yeni bir sütun tanımlamak için lambda hesabı kullanılabilir.

AttributeError: ("'str' object has no attribute 'hour'", u'occurred at index 0') 

cevap

1

Bu sütunu to_datetime dönüştürmek ilk ihtiyaç

def time_slot_convert(time): 
    return (time.hour()) + 1 

df['time_slot'] = df.apply(lambda row: time_slot_convert(row['time']), axis =1) 

Ancak, bu hatayı alıyorum. Eğer apply işlevi gerekiyorsa

df['time_slot'] = pd.to_datetime(df['time']).dt.minute + 1 
print df 
    site_number  date    time Class Speed_KPH time_slot 
no.                  
0    11 2016-02-27 00:00:13.0000000 Short   43   1 
1    11 2016-02-27 00:02:15.0000000 Short   45   3 
2    11 2016-02-27 00:00:28.0000000 Short   31   1 
3    11 2016-02-27 00:03:28.0000000 Short   31   4 


df['time_slot'] = pd.to_datetime(df['time']).dt.hour + 1 
print df 
    site_number  date    time Class Speed_KPH time_slot 
no.                  
0    11 2016-02-27 00:00:13.0000000 Short   43   1 
1    11 2016-02-27 00:02:15.0000000 Short   45   1 
2    11 2016-02-27 00:00:28.0000000 Short   31   1 
3    11 2016-02-27 00:03:28.0000000 Short   31   1 

:

Sonra 00:00:13.0000000Hours:Minutes:Seconds ise, dt.minute değil dt.hour kullanabilirsiniz

def time_slot_convert(time): 
    return (time.minute + 1) 

df['time_slot'] = pd.to_datetime(df['time']).apply(time_slot_convert) 
print df 
    site_number  date    time Class Speed_KPH time_slot 
no.                  
0    11 2016-02-27 00:00:13.0000000 Short   43   1 
1    11 2016-02-27 00:02:15.0000000 Short   45   3 
2    11 2016-02-27 00:00:28.0000000 Short   31   1 
3    11 2016-02-27 00:03:28.0000000 Short   31   4 

Veya uygulamak lambda:

def time_slot_convert(time): 
    return (time.minute + 1) 

df['time_slot']=df.apply(lambda row: time_slot_convert(pd.to_datetime(row['time'])),axis=1) 
print df 
    site_number  date    time Class Speed_KPH time_slot 
no.                  
0    11 2016-02-27 00:00:13.0000000 Short   43   1 
1    11 2016-02-27 00:02:15.0000000 Short   45   3 
2    11 2016-02-27 00:00:28.0000000 Short   31   1 
3    11 2016-02-27 00:03:28.0000000 Short   31   4 
0

Sen deneyebilirsiniz:

import time 
def time_slot_convert(time): 
    time = time.strptime(x, "%H:%M:%S.0000000") 
    return time.tm_hour + 1