【问题标题】:how to load a file with date and time as a datetime object in python?python - 如何在python中将日期和时间的文件作为日期时间对象加载?
【发布时间】:2018-08-02 19:41:45
【问题描述】:

需要在第一列加载此文件,日期在第二列,HH:MM 在第二列。

它如何与 numpy.genfromtxt() 配合使用?也许是熊猫?

我的文件看起来像:

2017-Feb-11 00:00  m    4.87809   1.86737   5.04236   0.27627   1.5995 
2017-Feb-11 00:05  m    4.86722   1.86711   5.00023   0.27616   1.5965 
2017-Feb-11 00:10  m    4.85641   1.86690   4.95810   0.27604   1.5941 

【问题讨论】:

  • 你试过什么?什么没有按您的预期工作?无需研究,我认为 numpy 和 pandas 可以为您做到这一点。
  • 尝试了 genfromtxt,得到了 col 1 + 2 的 nan,但在 datetime 对象中转换无效。格式化字符串也不起作用。
  • 好吧,MaxU 给了你一个答案。

标签: python pandas dataframe genfromtxt


【解决方案1】:
In [32]: df = pd.read_csv(filename, delim_whitespace=True, parse_dates=[0], header=None)

In [33]: df[1] = pd.to_timedelta(df[1] + ':00')

In [34]: df
Out[34]:
           0        1  2        3        4        5        6       7
0 2017-02-11 00:00:00  m  4.87809  1.86737  5.04236  0.27627  1.5995
1 2017-02-11 00:05:00  m  4.86722  1.86711  5.00023  0.27616  1.5965
2 2017-02-11 00:10:00  m  4.85641  1.86690  4.95810  0.27604  1.5941

In [35]: df.dtypes
Out[35]:
0     datetime64[ns]
1    timedelta64[ns]
2             object
3            float64
4            float64
5            float64
6            float64
7            float64
dtype: object

PS 在 Pandas 中,如果没有日期组件,您将无法拥有 datetime dtype - 这就是我将其转换为 timedelta dtype 的原因。或者,您可以将前两列合并到一个 datetime 列中:

In [29]: df['date'] = pd.to_datetime(df.pop(0) + ' ' + df.pop(1) + ':00')

In [30]: df
Out[30]:
   2        3        4        5        6       7                date
0  m  4.87809  1.86737  5.04236  0.27627  1.5995 2017-02-11 00:00:00
1  m  4.86722  1.86711  5.00023  0.27616  1.5965 2017-02-11 00:05:00
2  m  4.85641  1.86690  4.95810  0.27604  1.5941 2017-02-11 00:10:00

In [31]: df.dtypes
Out[31]:
2               object
3              float64
4              float64
5              float64
6              float64
7              float64
date    datetime64[ns]
dtype: object

【讨论】:

    【解决方案2】:

    import pandas ?不,最好使用numpy.genfromtxt() 工具:

    好吧,为这种转换加载一个完整的重量级包是可能的,但很尴尬。

    由于您的其他问题已经开始检查numpy.genfromtxt() 的权力,请继续前进:

    converters  = { 0: lambda aSTR: datetime.datetime.strptime( aSTR, "%Y-%b-%d" ),
                    #  WARNING:                                            ^
                    #                                                      |
                    #  above presented conversion specifier is locale-dependent
                    #                                       so revise code if used
                    #                                       in other locale domains
                    1: lambda aSTR: getTimeDelta( aSTR ),
                    }
    

    最后,使用.datetime + .timedelta aritmetics 的常见做法。

    加载一个完全成熟的 pandas 只是为了添加两列 datetime 值是可能的,但是有点 [TIME]-domain 和 [SPACE]-domain 矫枉过正,不是是吗?

    :o)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 2011-12-02
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多