【问题标题】:datetime conversion too long for a dataframe数据帧的日期时间转换太长
【发布时间】:2014-03-27 23:37:25
【问题描述】:

我正在寻找在 datetime 中转换 read_csv 读取的索引,但这需要很长时间(超过 1 分钟)。

有人知道更有效的方法吗(其他命令,使用 cython,...)?

>>> df
<class 'pandas.core.frame.DataFrame'>
Index: 3367200 entries, 2014/02/28 to 2017/12/31
Columns: 3 entries, SCENARIO to 0
dtypes: float64(1), object(2)
>>> df.index = pd.to_datetime(df.index)

【问题讨论】:

  • 你在用 read_csv 解析日期吗?
  • 我做 df = pd.read_csv(filename, sep='\t', index_col=[0,1]) 并且日期在 col1 中

标签: python pandas


【解决方案1】:

您应该使用parse_dates argument for read_csv,这样它会直接作为 datetime64 (int64) 而不是字符串读入(然后必须对其进行解析):

from StringIO import StringIO  # in python 2
a = '''date,A,B
1/1/2014,1,2
1/1/2014,2,3'''

In [11]: pd.read_csv(StringIO(a), index_col=[0, 1], parse_dates=[0])
Out[11]: 
              B
date       A   
2014-01-01 1  2
           2  3

【讨论】:

  • @user3442271 出于兴趣,这对您的时间有什么影响?
  • 这样可以将我这边的时间减少一半。问题是我最初在 24 列中有小时值,在第一个列中有日期。所以我必须尽可能地提高效率,因为之后,我必须附加列并申请在日期时间上做一个 relativedelta (实际上需要多花 2 分钟)......
  • @user3442271 听起来很有趣,也许可以对重塑方面提出一个新问题! :)
  • 我已经为这个典型的问题做了一个{too long dataframe apply row functions}。如果我是第一个处理这个问题的人,我感到非常惊讶。
  • @user3442271 啊!查看其他问题
猜你喜欢
  • 1970-01-01
  • 2020-12-04
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多