转置.csv文件:将标题时间戳更改为行TimeStamp

时间:2015-09-24 07:34:19

标签: python csv

我的数据看起来像这样:

statnr      datum       ele h01    h02    h03    h04    h05    h06    h07    h08    h09    h10    h11    h12    h13    h14    h15    h16    h17    h18    h19    h20    h21    h22    h23    h24    
----------- ----------- --- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ 
   20101    20020401    D6K    103    126    115    114    105    101    118    118    130    129    126    128    132    133    131    130    130    131    130    130    125    117    122    124 
   20101    20020402    D6K    126    118    119    120    114    111    107    119    124    126    122    130    130    130    128    128    126    119    129    134    132    127    112    118 
   ........
   20101    20150909    D6K     72     82     75     76     82     93     91     96     99    101    108    108    103    100     94     90     82     92     88     79     77     89     94     92
   20101    20020401    FLP     54     61     58     61     66     67     65     56     47     46     40     40     39     32     34     34     37     43     45     45     50     54     59     63 
   20101    20020402    FLP     64     61     67     66     68     69     67     56     50     46     42     39     33     32     33     34     39     48     55     58     61     62     65     68 
   ........
   20101    20150909    FLP     93     95     92     94     94     96     95     92     90     84     87     75     81     75     75     74     83     87     89   96     94     92     91     94 
   20101    20070906    GSE  32700      0      0      0      0      0      3     10     17     30     28     27     37     44     37     25     16      5      1      0      0      0      0      0 
   20101    20070907    GSE      0      0      0      0      0      0     11     48     72    107    257    264    290    216    255    178    122     57      6      0      0      0      0      0 
   ........
   20101    20150909    GSE      0      0      0      0      0      1     17     51     71    118     82    200    116    130    142    156     48     15      1      0      0      0      0      0 
   20101    20020101    SUV      0      0      0      0      0      0      0      0      9     10     10     10     10     10     10     10      2      0      0      0      0      0      0      0 
   ........
   20101    20150909    SUV      0      0      0      0      0      0      0      0      0      1      0      5      1      4      4      9      2      0      0      0      0      0      0      0
   20101    20020401    TEX     30     18     21     18      9     10     18     42     69     91    114    117    126    135    133    127    114     87     58     47     39     33     27     24 
   ........
   20101    20150909    TEX     50     46     48     50     50     49     57     67     77     85     80    111     95    100    101     92     74     67     59     53     49     49     49     47 
   20101    20020401    QVX      6     10      9      8     13     25     19     15     16     19     24     24     19     23     24     22     24     23     19     13     12     16     16     18 
   ........
   20101    20150909    QVX     40     42     37     34     30     34     22     22     27     31     26     28     37     38     42     43     52     54     59     81     80     69     78     60 

你可以看到它是一个巨大的工作表,有一个statnr Row,DateRow,ele代表参数,而h01 - h24则是你可以想象的小时数。 我需要将该工作表中的格式调整为我正在使用的其他文件的格式(绘图和处理原因)

我目前正在尝试将此FileSheet转换为以下格式:

Date        Time    D6K FLP GSE SUV TEX QVX 
01.04.2002  01:00   103 54      0    30 6
.....
09.09.2015  23:59   92  94   0  0    47 60

所以我要做的是:

1)摆脱行[0](statnr)

2)用行[2]切换标题,以便所有参数都在标题中并将它们链接到行中的新时间日期fmt

3)将时间fmt从%H%M%D转换为%D%M& Y%H:%M

由于我是python和编码的新手,我以为我会问是否有可能有一个处理这种问题的包,如果有一个术语来解决这个问题(用行切换标题) - - >谢谢(彼得伍德)我将标题改为转置

感谢您的建议

澄清: ........表示我遗漏了一些行 -----------位于文件

1 个答案:

答案 0 :(得分:1)

因为您可能缺少数据,所以这不是转置块的简单情况。我认为您需要做的是将输入文件读入数据结构,然后您可以根据需要查找值以生成输出。在Python中,您可以使用词典,其键是元素类型,日期和小时的元组:

mydict = {}

with open('F:\myfile.txt') as f:
    z = f.readline() # discard headings
    z = f.readline() # discard row of dashes
    for line in f:
        fields = line.split()
        date = fields[1]
        ele = fields[2]
        for hour, value in enumerate(fields[3:27]):
            mydict[(ele, date, hour)] = value

现在,您拥有一个可以通过eledatehour寻址的大字典中的所有数据。我猜测ele值是固定的,您可以对它们进行硬编码,但是您需要构建一个实际在输入文件中找到的唯一日期列表,并按升序排列:

dateset=set()
for k in mydict.keys():
    dateset.add(k[1])
dates=list(dateset)
dates.sort()

现在您已准备好构建输出文件。

for date in dates:
    for hour in range(24):
        output = date + '\t' + hour
        for ele in ['D6K', 'FLP', 'GSE', 'SUV', 'TEX', 'QVX']:
            output = output + '\t' + mydict.get((ele, date, hour), '')
    print(output)

如果您提供的密钥不在字典中,则可以使用字典上的get方法指定要返回的默认值。

我没有处理日期格式化(注意'小时'的范围从0到23),或者将输出写入文件,但上面的内容应该可以帮助你。