首页 > 解决方案 > 来自 2 列的 Pandas read_csv parse_dates

问题描述

我在这里没有找到非常适合我的情况的帖子。我有一个 csv 文件,其中第一列是年(2002 年),第二列是月份(一月),第三列是 MonthCode(1 表示一月等)。我想导入 Pandas 数据框以创建完整日期索引。以下代码给出了一个错误,但应该向您展示我正在尝试做什么。

错误是:ValueError:时间数据'2002'与格式'%Y%b%d'不匹配

注意:我的数据中没有一个月中的某一天,所以我必须使用第一天或最后一天,除非有办法只索引年和月而没有日。

数据如下所示:

Year    Month   Month Code  District Code   District
2002    January 1   1   Albany
2002    January 1   2   Allegany
2002    January 1   3   Broome
2002    January 1   4   Cattaraugus
2002    January 1   5   Cayuga

不起作用的代码:

file = 'C:/.../snap.csv'

parser = lambda date: pd.datetime.strptime(date, '%Y%b%d')


# create dataframe from csv file
snapdf = pd.read_csv(file, parse_dates = [0,1], date_parser = parser)
# NOTE: I also tried parse_dates = [0,2] but same error

标签: pythonpandasdataframe

解决方案


我终于把它运行起来了,最后它实际上非常简单。

snapdf["DateIndex"] = pd.to_datetime(snapdf['Year'].astype(str), format='%Y')

这从数据框的 Year 列中获取值(存储为 Int)并将其转换为新列 DateIndex 中的日期字符串。由于没有月份或日期数据,它会自动插入 01/01 作为月份和日期。

因此,年份列中的 2017 变为 01/10/2017


推荐阅读