【发布时间】:2021-07-25 14:18:32
【问题描述】:
我有一个日期格式为 01JAN2020 的数据集,我希望将其转换为 01-01-2020 它们可能出现在数据框中的任何列中。我的解决方案是将其导出为 CSV 并使用 SED 进行操作,但速度很慢。供参考的 SED 命令为:
conversions="sed -Ei -e 's/(,[0-9][0-9])(JAN)([0-9]{4},)/\\1-01-\\3/g' "
conversions=conversions+"-e 's/(,[0-9][0-9])(FEB)([0-9]{4},)/\\1-02-\\3/g' "
conversions=conversions+"-e 's/(,[0-9][0-9])(MAR)([0-9]{4},)/\\1-03-\\3/g' "
conversions=conversions+"-e 's/(,[0-9][0-9])(APR)([0-9]{4},)/\\1-04-\\3/g' "
conversions=conversions+"-e 's/(,[0-9][0-9])(MAY)([0-9]{4},)/\\1-05-\\3/g' "
conversions=conversions+"-e 's/(,[0-9][0-9])(JUN)([0-9]{4},)/\\1-06-\\3/g' "
conversions=conversions+"-e 's/(,[0-9][0-9])(JUL)([0-9]{4},)/\\1-07-\\3/g' "
conversions=conversions+"-e 's/(,[0-9][0-9])(AUG)([0-9]{4},)/\\1-08-\\3/g' "
conversions=conversions+"-e 's/(,[0-9][0-9])(SEP)([0-9]{4},)/\\1-09-\\3/g' "
conversions=conversions+"-e 's/(,[0-9][0-9])(OCT)([0-9]{4},)/\\1-10-\\3/g' "
conversions=conversions+"-e 's/(,[0-9][0-9])(NOV)([0-9]{4},)/\\1-11-\\3/g' "
conversions=conversions+"-e 's/(,[0-9][0-9])(DEC)([0-9]{4},)/\\1-12-\\3/g' "+filename
subprocess.run(conversions, shell=True)
我希望最有可能使用 re 在 python 程序中直接执行此操作,但无法正确进行部分替换。完成日期格式后,我应该能够自己管理时间戳(01JAN2020:00:00:00)。在多个文件上运行,最终大约 1TB 的数据,所以运行时间很重要。
编辑以获取更多详细信息:
包含日期和时间戳的列是未知的,并且对于将要运行的每个帧都不同。
应该忽略的日期之间可能混有空值。
由于列顺序很重要,因此应进行更改。
也许是一个两步解决方案。 第 1 步确定所有非空值与上述正则表达式匹配的所有列。 然后第二步转换匹配列的匹配格式。
【问题讨论】: