Python Pandas从时间戳中删除日期

时间:2015-01-31 03:15:02

标签: python pandas

我有一个像这样的大数据集

                         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

如何使用pandas

执行此操作

1 个答案:

答案 0 :(得分:2)

如果你想改变pandas中的一个系列(列),那么模式是apply一个函数(它一次更新系列中的元素),然后将该系列重新分配到进入数据框

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)