python - 读取 csv 时加快日期时间格式化
问题描述
我有一个包含 4+m 记录的 csv 文件。
我使用 pd.read_csv('big_file.csv', dtype=object) 导入它
该文件有 2 列,日期格式如下:'yyyy-mm-ddThh:mm:ss.nsTZ' 例如'2018-05-05T04:39:09.447Z'
我需要将它们转换为 'yyyy-mm-dd H:M:S' 例如 '2018-09-23 06:03:12'
我使用以下代码来执行此操作:
df['created'] = pd.to_datetime(arg=df.created).dt.strftime('%Y-%m-%d %H:%M:%S')
df['lastLogin'] = pd.to_datetime(arg=df.lastLogin).dt.strftime('%Y-%m-%d %H:%M:%S')
df['lastUpdated'] = pd.to_datetime(arg=df.lastUpdated).dt.strftime('%Y-%m-%d %H:%M:%S')
df['created'] = pd.to_datetime(arg=df.created)
df['lastLogin'] = pd.to_datetime(arg=df.lastLogin)
df['lastUpdated'] = pd.to_datetime(arg=df.lastUpdated)
这个过程非常缓慢:
CPU times: user 1min 48s, sys: 1.19 s, total: 1min 49s
Wall time: 1min 49s
有没有办法加快速度?
解决方案
由于您的时间戳遵循非标准格式,因此我建议在读取 csv 文件时将参数parse_dates和date_parser与自定义解析器一起使用,例如:
parser = lambda date: pd.datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%Z')
df = pd.read_csv('big_file.csv',
parse_dates=['created', 'lastLogin', 'lastUpdated'],
date_parser=parser)
来自熊猫文档
date_parser : 函数,可选
用于将字符串列序列转换为日期时间实例数组的函数。默认使用 dateutil.parser.parser 进行转换。Pandas 将尝试以三种不同的方式调用 date_parser,如果发生异常则前进到下一种方式: 1) 传递一个或多个数组(由 parse_dates 定义)作为参数;2) 将 parse_dates 定义的列中的字符串值连接(按行)到单个数组中并传递它;3) 使用一个或多个字符串(对应于 parse_dates 定义的列)作为参数,为每一行调用一次date_parser 。
推荐阅读
- winapi - Windows 中的 JNA:使用 Windows 作业自动终止子进程
- python - while-true 循环内的输入提示
- android-studio - 在哪里可以找到 Android Studio“代码和文件模板”中可用的变量列表?
- java - 如何使用 Selenium WebDriver 和 Java 在 InPrivate 中启动 Microsoft Edge
- c++ - 如何访问 tensorflow::Tensor C++
- javascript - 如何在不删除子项的情况下获取 HTML(jQuery)
- html - 引导导航不适用于子页面
- templates - 用于合并文件的 Helm Go 模板
- sql - 找出所有访问过 SQL Server 数据库的用户
- vim - 删除/移动/拉动多个部分 vim