2015-06-12 52 views
0

从CSV文件中,我有一列日期(yyyy-mm-dd)。 为了获得数年的数据快照,我希望通过将日期数据从yyyy-mm-dd截断为yyyy来对数据进行分类。替换CSV中的日期列数据

例如,如果我想从“表格”(如table.datecolumn)编辑“datecolumn”,我将如何使用替换功能?还是有另一种方式?

+1

你可以提供更多的上下文/代码吗?实际上,您可以通过按日期排序和过滤来以Excel(基本GUI,而不是VBA宏)的方式执行此操作。 – TigerhawkT3

+0

上下文是,我正在跟踪2008年至2015年2万个房产的月租金。excel表有yy-mmm(即2008年4月8日意味着2008年4月),所以我使用Python将其清理成yyyy-mm -dd格式。 –

+0

为什么要删除月份和日期? Excel的排序和过滤功能在任何格式的日期都能正常工作。 – TigerhawkT3

回答

1

也许这将帮助你开始...

import csv 
import datetime 

date_column_index = 1 
with open('infile.csv','rb') as infile, open('outfile.csv','wb') as outfile: 
    csvr = csv.reader(infile, delimiter=',') 
    csvw = csv.writer(outfile, delimiter=',') 
    for row in csvr: 
     temprow = row 
     temprow[date_column_index] = datetime.datetime.strptime(temprow[date_column_index],'%Y-%m-%d').strftime('%Y') 
     csvw.writerow(temprow) 

它假定没有头。

datetime.datetime.strptime使用来自格式为'YYYY-MM-DD'的csv的输入创建日期时间对象,然后strftime输出一个字符串,只是'YYYY'。

Here更多地使用strptime/strftime格式。

0

您可以直接在Excel中执行此操作。我希望指定日期输入格式与指定日期输出格式一样容易,但幸运的是它只是one concise line

在细胞A2

08-Feb 

在细胞B2

=DATEVALUE(RIGHT(A2,3)&"-20"&LEFT(A2,2)) 

这得到A2细胞的RIGHT - 大多数3字符,增加了-到,然后添加A2细胞的LEFT - 大多数2字符,它会创建一个字符串,表示DATEVALUE函数可识别es:

2008-Feb 

然后它可以解析日期作为一个实际的日期,并进行各种过滤,排序和比较等。然后,您可以填写以创建解析日期的完整列,并使用它来替换原始文件或保留两列完整。