分割日期(形式:YYYY-MM-DD-HH-MM-SS)列分为两部分

时间:2015-04-02 06:18:29

标签: python datetime pandas

我编辑了这个问题,以明确我想要解决的问题。

这是我得到的数据:

                  Date   open   high  close    low   volume  price_change
0  2015-03-25 13:55:00  15.37  15.38  15.35  15.34  1121.00         -0.02
1  2015-03-25 14:00:00  15.36  15.38  15.36  15.34   595.00          0.00
2  2015-03-25 14:05:00  15.36  15.38  15.36  15.35  1369.01          0.00
3  2015-03-25 14:10:00  15.36  15.40  15.40  15.36  3215.55          0.04
4  2015-03-25 14:15:00  15.40  15.45  15.39  15.39  1563.45         -0.01

我想将日期列分为两列,一个是“2015-03-25”,另一个是“13:55:00”。

1 个答案:

答案 0 :(得分:1)

我可以建议以下内容......代码的关键位在最后两行......代码的其余部分是重新创建您的DataFrame ......

# load your data
from StringIO import StringIO # import from io for python 3
data = """     Date,   open,   high,  close,    low,   volume,  price_change
2015-03-25 13:55:00,  15.37,  15.38,  15.35,  15.34,  1121.00,         -0.02
2015-03-25 14:00:00,  15.36,  15.38,  15.36,  15.34,  595.00,           0.00
2015-03-25 14:05:00,  15.36,  15.38,  15.36,  15.35,  1369.01,          0.00
2015-03-25 14:10:00,  15.36,  15.40,  15.40,  15.36,  3215.55,          0.04
2015-03-25 14:15:00,  15.40,  15.45,  15.39,  15.39,  1563.45,         -0.01"""
df = pd.read_csv(StringIO(data), header=0, index_col=None, skipinitialspace=True)
df.Date = pd.to_datetime(df.Date)

# now let's create the date and time columns you want
df['date_only'] = [x.date() for x in df['Date']]
df['time_only'] = [x.time() for x in df['Date']]

这给我的输出如下......

In [8]: df
Out[8]: 
                 Date   open   high  close    low   volume  price_change  \
0 2015-03-25 13:55:00  15.37  15.38  15.35  15.34  1121.00         -0.02   
1 2015-03-25 14:00:00  15.36  15.38  15.36  15.34   595.00          0.00   
2 2015-03-25 14:05:00  15.36  15.38  15.36  15.35  1369.01          0.00   
3 2015-03-25 14:10:00  15.36  15.40  15.40  15.36  3215.55          0.04   
4 2015-03-25 14:15:00  15.40  15.45  15.39  15.39  1563.45         -0.01   

    date_only time_only  
0  2015-03-25  13:55:00  
1  2015-03-25  14:00:00  
2  2015-03-25  14:05:00  
3  2015-03-25  14:10:00  
4  2015-03-25  14:15:00  

值得注意的是,这会产生不同类型的数据。

In [62]: type(df.date_only[0])
Out[62]: datetime.date

In [63]: type(df.time_only[0])
Out[63]: datetime.time

In [64]: type(df.Date[0])
Out[64]: pandas.tslib.Timestamp

In [65]: df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5 entries, 0 to 4
Data columns (total 9 columns):
Date            5 non-null datetime64[ns]
open            5 non-null float64
high            5 non-null float64
close           5 non-null float64
low             5 non-null float64
volume          5 non-null float64
price_change    5 non-null float64
date_only       5 non-null object
time_only       5 non-null object
dtypes: datetime64[ns](1), float64(6), object(2)
memory usage: 400.0+ bytes

除了上述所有内容之外,您可以使用一系列datetime64 [ns]对象(上面的Date列)的新.dt访问器属性来实现您想要的功能。这是在熊猫0.15.0中引入的。它允许您执行df.Date.dt.year之类的操作以从datetime64 [ns]对象获取年份。还有月,日,小时,分钟,秒等等。