熊猫从2列中读取_csv parse_dates

时间:2018-10-27 20:19:18

标签: python pandas dataframe

我在这里找不到适合我情况的帖子。我有一个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

2 个答案:

答案 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