重新组织CSV以使日期不是列标题

Joh*_*n S 5 python csv excel

我正在尝试重组excel表(或csv),以便日期不再是列标题.我正在使用有限的python知识来尝试这样做,但由于不知道从哪里开始,我可以使用一些帮助.

在每个日期下记录当天发生的特定地点的情况.可以跳过空值.某些单元格包含" - "并且可以转换为0.我想为日期创建一列,并使用一列来表示当天的数字读数.如果当天监控地名,则地名是新行.

示例(以这种方式启动的人的smh):

Name,7/1/2009,7/2/2009,7/3/2009,7/4/2009..... (and so on to the present)
Place A,,5,3,
Place B,0,,23,--
Place C,1,2,,35
Run Code Online (Sandbox Code Playgroud)

我想要的是:

Name, Date, Reading
Place A, 7/2/2009, 5
Place A, 7/3/2009, 3
Place B, 7/1/2009, 0
Place B, 7/4/2009, 0   <--- Even though this is a dash originally it can be converted to a 0 to keep the number an int.  
Run Code Online (Sandbox Code Playgroud)

有数百个行(地点),列(日期)已经达到BPD(这是正确的1772列!).

aba*_*ert 2

您要做的是将其标准化为表格。

通常执行此操作的方法是:对于非规范表中的每一行,将行插入到规范表中的每个非规范列中。

具体执行此操作的方式取决于您处理表的方式。例如,如果您csv在 Python 3.x 中使用该模块以及 Excel-default-dialect CSV 文件,则其内容将如下所示:

with open('old.csv') as oldcsv, open('new.csv', 'w') as newcsv:
    r, w = csv.reader(oldcsv), csv.writer(newcsv)
    header = next(r)
    w.writerow(['Name', 'Date', 'Reading'])
    for row in r:
        for colname, colval in zip(header[1:], row[1:]):
            w.writerow([row[0], colname, colval])
Run Code Online (Sandbox Code Playgroud)

如果您想使用例如xlrd/ xlwtXlsxReader/ XlsxWriterwin32comExcel 脚本等,细节会有所不同,但基本思想是相同的:迭代行,然后迭代日期列,生成新行每个值都基于行中的名称、列标题中的日期以及行中的值。

您应该能够从这里弄清楚如何跳过 null 值、转换"--"为等。0