2015-03-06 3 views
-1

У меня есть dataframe, который выглядит следующим образом:счетные поля даты в панд

from StringIO import StringIO 

myst="""Uptime: 905034 Threads: 5 Questions: 1215 Slow queries: 3 Opens: 190 Flush tables: 1 Open tables: 4 Queries per second avg: 0.001 
Uptime: 905094 Threads: 5 Questions: 1216 Slow queries: 3 Opens: 190 Flush tables: 1 Open tables: 4 Queries per second avg: 0.001 
Uptime: 905154 Threads: 5 Questions: 1217 Slow queries: 3 Opens: 190 Flush tables: 1 Open tables: 4 Queries per second avg: 0.001 
""" 
u_cols=[] 
for i in range(29): 
    u_cols.append('column'+str(i)) 

myf = StringIO(myst) 
import pandas as pd 
df = pd.read_csv(StringIO(myst), sep=' ', names = u_cols) 

То, что я пробовал:

df['IST_DATE']=df['column1'].apply((lambda x: dt.datetime.today() - dt.timedelta(seconds=60))) 

In [127]: df[['column1','IST_DATE']] 

Out[127]: 
    column1  IST_DATE 
0 905034 2015-03-06 15:55:55.993769 
1 905094 2015-03-06 15:55:55.993791 
2 905154 2015-03-06 15:55:55.993803 

Ожидаемый результат должен иметь разницу в 1 минуту в строке. Напр.

Out[127]: 
    column1  IST_DATE 
0 905034 2015-03-06 15:53:55.993769 
1 905094 2015-03-06 15:54:55.993791 
2 905154 2015-03-06 15:55:55.993803 

Время работы рассчитывается каждую минуту. Последняя строка в кадре данных показывает прошедшие секунды. Так, например, 905154 означает, что сервер был запущен 24 февраля

>>> dt.datetime.today() - dt.timedelta(seconds=905154) 
datetime.datetime(2015, 2, 24, 4, 40, 16, 28786) 

Другими словами, «столбец1», которое представляет секунды от начала времени (24 февраля в этом случае) должны быть преобразованы в читаемых даты.


обновление:

Как найти последнее значение column1? мне нужно использовать это значение (например, для 905154), как это ....

df['IST_DATE']=df['column1'].apply((lambda x: dt.datetime.today() - pd.Timedelta(905154,unit='s') + pd.Timedelta(x,unit='s'))) 

df[['column1','IST_DATE']] 

обновление 1

Я пытался что-то вроде этого, но это не сработало:

myval=df.tail(1)['column1'] 

df['IST_DATE']=df['column1'].apply((lambda x: dt.datetime.today() - pd.Timedelta(str(myval),unit='s') + pd.Timedelta(x,unit='s'))) 

ответ

0

Глава и хвост - это неправильный способ индексирования данных панд.

import pandas as pd 
import datetime as dt 

u_cols=[] 
for i in range(29): 
    u_cols.append('column'+str(i)) 

import pandas as pd 
df = pd.read_csv('/root/status_success.txt', sep=' ', names = u_cols) 

myval=df['column1'].iloc[-1] 
df['IST_DATE']=df['column1'].apply((lambda x: dt.datetime.today() - pd.Timedelta(myval,unit='s') + pd.Timedelta(x,unit='s'))) 
Смежные вопросы