i有一个pandas dataframe,由许多列组成,这些列是以时代表示的字符串(例如" 8:14:30.123")。是否有一种有效的方法将所有这些列转换为数值?我进行了一些研究并找到了熊猫to_datetime()
功能,但一次仅适用于一个列,而且我有太多的列以迭代。
您可以通过它们迭代并应用to_datetime
函数或
当您以CSV的方式读取它时,请使用parse_dates
参数:
parse_dates:boolean,ints或名称列表,列表列表或dict 如果是正确的 ->尝试解析索引。如果[1,2,3] ->尝试解析列 1、2、3每个作为单独的日期列。如果[[1,3]] ->组合列 1和3,分析作为单个日期列。{‘foo’:[1,3]} ->解析 第1列1,3作为日期和呼叫结果" foo"有一个快速路径 ISO8601格式日期。
更新:
如果您想要的速度,最好使用以下功能将列转换为DateTime。
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