如何在 read_csv 中指定日期时间格式

7
我有一个文件,每行的格式如下:
YYYY-MM-DD-HH-MM-SS  uint64 float64 float64 uint64

我已经阅读过它,使用了:
pd.read_csv('file.txt', sep=' ', header=None, index_col=0, names= ('C1', 'C2', 'C3', 'C4'), use_unsigned=True, parse_dates=True, infer_datetime_format=True)

构造的日期时间不正确。 我能指定具体格式吗?
3个回答

16
你可以将正确格式解析的函数作为read_csvdate_parser关键字参数传递,但另一个选项是在读取时不解析日期,而是使用to_datetime之后再解析(此函数允许指定格式,并且比自定义date_parser函数更快):
df = pd.read_csv('file.txt', sep=' ', header=None, index_col=0, names= ('C1', 'C2', 'C3', 'C4'), use_unsigned=True)
df.index = pd.to_datetime(df.index, format="%Y-%m-%d-%H-%M-%S")

9
我找到了这个方法。
f = lambda s: datetime.datetime.strptime(s,'%Y-%m-%d-%H-%M-%S')
pd.read_csv('file.txt', sep=' ', header=None, index_col=0, names= ('C1', 'C2', 'C3', 'C4'), use_unsigned=True, date_parser=f)

那个有效。

3

新的更简洁解决方案

自从Pandas 2.0.0版本以来,有一种直接的方法可以使用parse_dates来指定日期列和date_format来指定格式来导入具有特定格式的日期。

示例csv

根据您的导入,我创建了一个名为test.csv的示例文件,内容如下:

datetime float_col int_col
2023-09-14-15-00-00 13.2 7
2023-09-14-15-12-03 13.4 8

直接一行解决方案 - 导入语句:

df = pd.read_csv('test.csv', sep=' ', parse_dates = [0], date_format = '%Y-%m-%d-%H-%M-%S')

导入结果:

enter image description here

结果的数据类型:
datetime     datetime64[ns]
float_col           float64
int_col               int64

解释

parse_dates是一个包含日期的列位置的列表。由于日期列位于第一个位置,所以它的位置是0。 对于date_format,使用通常的Python格式定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接