【问题标题】:Extracting hour, date and month from a pandas (python) DataFrame object从 pandas (python) DataFrame 对象中提取小时、日期和月份
【发布时间】:2015-01-18 11:45:40
【问题描述】:

使用 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. x 列的日期 [29 from row 0],
  2. x 列的月份 [04April 从第 0 行],
  3. x 列的月份和日期 [29-04 或第 0 行的 29-April],
  4. xy 列的小时和分钟 [07-40 from row 0]

我使用

从文本文件中导入了 DataFrame

df = pd.read_table("C:\data.txt, sep= '\t'")

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

当我运行df.dtypes 时,我得到了

   x    object
   y    object
   dtype: object

我正在 Python 3.4 中使用 Pandas 版本 0.14.1

示例数据帧

import numpy as np
import pandas a pd

df = pd.DataFrame({'x': ['29-04-2014 07:40:52', np.nan, '29-04-2014 08:16:16','29-04-2014 08:19:56', '29-04-2014 08:27:20'],
                   'y': ['07:40:52', '07:15:00', np.nan, '07:45:00', '07:30:00']})

【问题讨论】:

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


    【解决方案1】:

    我认为 Pandas 的方式是让 x 成为您的索引,然后您可以使用一些简单的方法来提取您想要的内容。非 Pandas 的方式是使用 datetime 模块。

    熊猫方式...作为背景,您可以阅读 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
    

    【讨论】:

    • 谢谢!我有其他列具有类似的条目,但只能将其中之一设为索引。
    猜你喜欢
    • 1970-01-01
    • 2019-01-07
    • 2017-04-05
    • 2014-09-28
    • 2014-01-23
    • 2019-04-25
    • 2019-03-20
    相关资源
    最近更新 更多