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