我在这里找不到适合我情况的帖子。我有一个csv文件,其中第一列是Year(2002),第二列是Month(January),第三列是MonthCode(1代表一月,依此类推)。我想导入Pandas数据框以创建完整的日期索引。以下代码给出了一个错误,但应该向您展示我的意图。
错误是: ValueError:时间数据“ 2002”与格式“%Y%b%d”不匹配
注意:我的数据中没有月中的某天,因此我必须使用第一个或最后一个,除非有一种方法可以只对没有年的Day和Month进行索引。
数据如下:
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
答案 0 :(得分:0)
我更改了数据,以使其更明显地将日期解析为数据框
Year,Month,Month Code,District Code,District
2002,January,1,1,Albany
2004,February,1,2,Allegany
2005,December,1,3,Broome
2007,August,1,4,Cattaraugus
2001,March,1,5,Cayuga
在第1-3列中使用parse_dates
参数:
>>>> with open('snap.csv') as f:
df = pd.read_csv(f, parse_dates={'Date': [0,1,2]}, index_col='Date')
>>>> df
District Code District
Date
2002-01-01 1 Albany
2004-02-01 2 Allegany
2005-12-01 3 Broome
2007-08-01 4 Cattaraugus
2001-03-01 5 Cayuga
>>>> df.District
Date
2002-01-01 Albany
2004-02-01 Allegany
2005-12-01 Broome
2007-08-01 Cattaraugus
2001-03-01 Cayuga
Name: District, dtype: object
答案 1 :(得分:0)
我终于开始运行了,实际上实际上很简单。
snapdf["DateIndex"] = pd.to_datetime(snapdf['Year'].astype(str), format='%Y')
这将从数据框的Year列中获取值(存储为Int),并将其转换为新列DateIndex中的日期字符串。由于没有月或日数据,因此它将自动插入01/01作为月和日。
因此,“年份”列中的2017年变为01/01/2017