2015-01-31 5 views
1

У меня есть большие наборы данных, как этотPython Панда даты удалить из временной метки

      user category 
time         
2014-01-01 00:00:00 21155349   2         
2014-01-01 00:00:00 56347479   6          
2014-01-01 00:00:00 68429517  13 
2014-01-01 00:00:00 39055685   4 
2014-01-01 00:00:00 521325  13 

Я хочу сделать это как

   user category 
time         
00:00:00 21155349   2         
00:00:00 56347479   6                  
00:00:00 68429517  13 
00:00:00 39055685   4 
00:00:00 521325  13 

Как это сделать с помощью панда

+0

Вы хотите изменить значения или просто как они появляются на экране? –

+0

Я хочу создать фрейм данных, удалив часть даты из исходного файла csv – milinda49

ответ

2

Если вы хотите для мутации серии (столбца) в пандах, шаблон должен быть apply функцией для него (которая обновляется по элементу в серии за раз), а затем назначать эту серию обратно в dataframe

import pandas 
import StringIO 

# load data 
data = '''date,user,category 
2014-01-01 00:00:00, 21155349,   2         
2014-01-01 00:00:00, 56347479,   6          
2014-01-01 00:00:00, 68429517,  13 
2014-01-01 00:00:00, 39055685,   4 
2014-01-01 00:00:00, 521325,  13''' 
df = pandas.read_csv(StringIO.StringIO(data)) 
df['date'] = pandas.to_datetime(df['date']) 

# make the required change 
without_date = df['date'].apply(lambda d : d.time()) 
df['date'] = without_date 

# display results 
print df 

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

df = pandas.read_csv(StringIO.StringIO(data), index_col='date') 
ser = pandas.to_datetime(df.index).to_series() 
df.set_index(ser.apply(lambda d : d.time())) 

Как было предложено @DSM, если у вас есть панды позже, чем 0,15 .2, вы можете использовать в аксессуре .dt для выполнения быстрых обновлений.

df = pandas.read_csv(StringIO.StringIO(data), index_col='date') 
ser = pandas.to_datetime(df.index).to_series() 
df.set_index(ser.dt.time) 
+2

Пока это будет работать, 'apply' - это метод последней инстанции: он имеет тенденцию быть довольно медленным. В этом случае мы можем обратиться к векторизованному «dt» accessor и получить время через 'df [" date "]. Dt.time' (после того, как мы гарантировали, что столбец подобен, в любом случае.) – DSM

+1

Это также не нужно преобразовывать в серию. Атрибут 'time' даже доступен прямо в индексе (без использования' '.dt'') – joris