Transpose.csv文件:将标题时间戳更改为行时间戳

2024-09-22 20:37:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据如下:

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是你可以想象的小时数。 我需要将该工作表的格式调整为我正在处理的其他文件的格式(打印和处理原因)

我正在尝试将此文件表转换为以下格式:

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和编码还不熟悉,我想问一下,是否有一个包可以处理这类问题,以及是否有一个通用的术语(用行切换标题)-->;谢谢(Peter Wood),我将标题改为Transpose

谢谢你的建议

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


Tags: 文件标题参数格式时间texgseele
1条回答
网友
1楼 · 发布于 2024-09-22 20:37:53

因为您可能有丢失的数据,这不是一个简单的转置块的情况。我认为您需要做的是将输入文件读入数据结构中,然后根据需要查找值以生成输出。在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)

使用dictionary上的get方法,可以指定如果提供的键不在dictionary中,将返回的默认值。你知道吗

我没有处理日期格式(注意'hour'的范围从0到23),也没有将输出写入文件,但是上面的内容应该可以让您继续。你知道吗

相关问题 更多 >