我有这种csv文件:
date,a,b,c
2014,12,29,7,12,45
2014,12,30,7,13,12
2014,12,31,6.5,6,5
因此第一行没有明确指定所有列,并假设您了解日期是前3列。
如何告诉read_csv将前三列视为一个日期列(同时保留其他标签)?
答案 0 :(得分:2)
如果使用parse_dates
参数,则可以将列直接解析为日期。
来自docs:
parse_dates:布尔值,整数或名称列表,列表或dict列表,默认为False
如果为真 - >尝试解析索引。如果[1,2,3] - >尝试将第1,2,3列分别解析为单独的日期列。如果[[1,3]] - >结合 第1列和第3列,并解析为单个日期列。 {'foo':[1,3]} - > 将列1,3解析为日期并调用结果'foo'存在快速路径 对于iso8601格式的日期。
对于您的文件,您可以执行以下操作:
pd.read_csv(file_path, names=['y', 'm', 'd', 'a', 'b', 'c'], header=0,
parse_dates={'date': [0, 1, 2]}, index_col='date', )
a b c
date
2014-12-29 7.0 12 45
2014-12-30 7.0 13 12
2014-12-31 6.5 6 5
标题中缺少值的内容通过传递names
参数和header=0
(覆盖现有标题)来解决。然后可以指定应将哪些列解析为日期。
请参阅另一个示例here。