从pandas(python)DataFrame对象中提取小时,日期和月份

时间:2014-11-20 14:53:40

标签: datetime python-3.x pandas python-datetime

使用pandas DataFrame df

         x                   y
0   29-04-2014 07:40:52     07:40:52
1   29-04-2014 07:59:25     07:15:00
2                NaN             NaN
3   29-04-2014 08:16:12     07:45:00
4   09-05-2014 08:19:14     07:30:00
5   23-04-2014 08:27:16     08:30:00
6   29-04-2014 08:37:16     07:00:00
7                NaN             NaN
8   29-04-2014 08:41:16     07:30:00
9   25-03-2014 08:42:16     07:30:00

哪些列x包含Date-Month-Year Hour:Minute:Secondy存储Hour:Minute:Second,如何只提取一个:

  1. 29的日期[{x,{0}},
  2. 04列的{April或{0}} x个月,
  3. 29-04栏中的{29-April或{0}} {0}},
  4. x07-40
  5. 的小时和分钟[来自第0行的{x]

    我使用

    从文本文件导入了DataFrame

    y

    但它最初来自MS Excel或MS Access。

    当我运行df = pd.read_table("C:\data.txt, sep= '\t'")时,我得到了

    df.dtypes

    我在Python x object y object dtype: object 中使用Pandas版本0.14.1

    示例DataFrame

    3.4

1 个答案:

答案 0 :(得分:2)

我认为Pandas的方法是将x作为索引,然后你可以使用一些简单的方法来提取你想要的东西。非Pandas方式是使用datetime模块。

Pandas方式......对于背景,您可以阅读documentation周围的时间序列数据,这是非常好的。

设置一些示例数据:

n = 10
df = pd.DataFrame(pd.date_range('1/1/2000', periods=n))
df.columns = ['x']
df['z'] = rand(n)
df.set_index('x', inplace=True)
print df

                   z
x                   
2000-01-01  0.863064
2000-01-02  0.980083
2000-01-03  0.278810
2000-01-04  0.960890
2000-01-05  0.309591
2000-01-06  0.662498
2000-01-07  0.802367
2000-01-08  0.403791
2000-01-09  0.981172
2000-01-10  0.342935

请注意,您的数据不会设置为x作为索引。这是重要的一步。

将日期作为时间段后,您可以访问自己的日期:

df['d'] = df.index.day
df['m'] = df.index.month
df['y'] = df.index.year
print df

                   z     y   d  m
x                                
2000-01-01  0.863064  2000   1  1
2000-01-02  0.980083  2000   2  1
2000-01-03  0.278810  2000   3  1
2000-01-04  0.960890  2000   4  1
2000-01-05  0.309591  2000   5  1
2000-01-06  0.662498  2000   6  1
2000-01-07  0.802367  2000   7  1
2000-01-08  0.403791  2000   8  1
2000-01-09  0.981172  2000   9  1
2000-01-10  0.342935  2000  10  1