Python pandas read_csv无法解析时间戳,因为分隔符是冒号

Python pandas read_csv无法解析时间戳,因为分隔符是冒号,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个大数据集,一个200MB的txt文件,其中数据用冒号分隔,这意味着read\u csv在尝试解析时间戳时失败(它应该是这样的) 我是否可以确保pandas能够正确解析时间戳,而无需清理/操作数据 这是一个问题的例子 import pandas as pd from datetime import datetime from io import StringIO to_dt = lambda x: datetime.strptime(x, "%m/%d/%Y %I:%M:%S

我有一个大数据集,一个200MB的txt文件,其中数据用冒号分隔,这意味着
read\u csv
在尝试解析时间戳时失败(它应该是这样的)

我是否可以确保pandas能够正确解析时间戳,而无需清理/操作数据

这是一个问题的例子

import pandas as pd
from datetime import datetime
from io import StringIO

to_dt = lambda x: datetime.strptime(x, "%m/%d/%Y %I:%M:%S %p")

ss = """first_name:date_registered
Philip:9/13/2020 12:03:05 AM"""

df = pd.read_csv(StringIO(ss), sep=":", parse_dates=["date_registered"], date_parser=to_dt)

print(df)
然后从
read\u csv
中删除
sep=“:”
,问题会消失,但如上所述,由于数据集的大小,这是不可行的

sep = ":(?!\d{,2}:\d{,2} [AP]M)(?!\d{,2} [AP]M)"
编辑: 一行的示例是

12345:888888:汤姆:玉米:建筑商:英国:伦敦:四年:特拉维斯:2017年10月9日12:00:00上午:


我建议逐行循环文件,并在每行中用逗号替换冒号的前N个和最后M个。N和M取决于文件的结构。在此之后,您将能够像往常一样使用带有逗号分隔符的
pd.read_csv()
sep
参数支持正则表达式。在这种情况下

sep = "(?<=\D):"
此模式将匹配所有冒号,但前面有时间格式的冒号除外。我的模式中的时间格式是
(0到2位):(0到2位):(0到2位)AM或PM

请注意,事实上,数据实际上是11列等更复杂的数据,这只是显示问题的示例数据。您必须使用熊猫读取数据吗?您可以使用标准库读取数据,然后在合理的时间内转换为pandas。@OrkunBerkYuzbasioglu我不必使用pandas读取数据。但是我更愿意,我相信一定有办法直接解决熊猫的问题,当然我不是第一个解决这个问题的人。此外,考虑到文件的大小,当使用标准库时,我试图解决数据列表中的内存不足问题。我会以您建议的方式考虑一个答案,但这将是最后的选择。code>没有我清理/操作数据?为了让它更清晰,我已经给出了一行数据集的示例,很抱歉之前没有提供。
sep = "(?<=\D):"
sep = ":(?!\d{,2}:\d{,2} [AP]M)(?!\d{,2} [AP]M)"