Python pandas,将多列字符串转换为时间?

时间:2015-05-10 01:03:35

标签: python numpy pandas scikit-learn

我有一个pandas DataFrame,它由许多列组成,这些列是以时间表示的字符串(例如" 8:14:30.123")。有没有一种有效的方法将所有这些列转换为数值?我做了一些研究并找到了panda to_datetime()函数,但它一次只能用于一列,而且我有太多列要迭代。

1 个答案:

答案 0 :(得分:2)

您可以遍历它们并应用to_datetime函数或

当您将其作为CSV阅读时,请使用parse_dates参数:

  

parse_dates:boolean,int或名称列表,列表列表或dict   如果为True - >尝试解析索引。如果[1,2,3] - >尝试解析列   1,2,3各自作为单独的日期列。如果[[1,3]] - >结合列   1和3并解析为单个日期列。 {'foo':[1,3]} - >解析   列1,3作为日期和调用结果'foo'存在快速路径   iso8601格式的日期。

更新

如果您想要它的速度,最好使用以下功能将列转换为日期时间。

def lookup(s):
    """
    This is an extremely fast approach to datetime parsing.
    For large data, the same dates are often repeated. Rather than
    re-parse these, we store all unique dates, parse them, and
    use a lookup to convert all dates.
    """
    dates = {date:pd.to_datetime(date) for date in s.unique()}
    return s.apply(lambda v: dates[v])

优点是可以查找重复日期,而不是一次又一次地转换为日期时间。似乎存在显着的速度差异:

$ python date-parse.py
to_datetime: 5799 ms
dateutil:    5162 ms
strptime:    1651 ms
manual:       242 ms
lookup:        32 ms

来源:https://github.com/sanand0/benchmarks/tree/master/date-parse