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

彼得·S

我的数据看起来像这样:

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行,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)用Row [2]切换标题,以便所有参数都在标题中,并将它们链接到各行中的新Time Date fmt

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

由于我是python和编码的新手,所以我想问一问是否有一个可以解决此类问题的软件包,以及是否有一个针对该问题的术语(用行切换标题)->谢谢(彼得·伍德)我将标题切换为“移调”

感谢您的建议

为了澄清起见:........表示我-----------在文件中遗漏了一些行

nekomatic

因为您可能缺少数据,所以这不是转置块的简单情况。我认为您需要做的是将输入文件读入数据结构,然后可以从中查找所需的值以生成输出。在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),也没有处理输出到文件中的问题,但是上面的内容应该可以帮助您解决。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章