Eu tenho dados que preciso alterar antes de executá-lo na biblioteca pandas em python.
No momento, ele está em um formato que armazena valores da meia-noite como 2400 e que deve ser alterado para 0000 . O formato também não preenche nem a hora nem o minuto, e eu acho que preciso fazê-lo para converter os 2 parâmetros em um formato desejado preenchido com zero 2400hr (0000-2359) .
Agora essa é a parte fácil!
A parte difícil é que cada vez que passar de 2359 para 0000, deve também alterar a data (que está no formato 'dayoftheyear', o que realmente torna mais fácil, suponho, por exemplo:% j +1, além de 31 de dezembro).
Portanto, aqui está uma amostra dos meus dados (as últimas duas colunas são valores não-data armazenados) na rolagem de um dia (é um arquivo csv, mas estou mostrando com um único espaço para delimitar a claridade visual):
1,2014,361,2340,0,0
1,2014,361,2341,0,0
1,2014,361,2342,0,0
1,2014,361,2343,0,0
1,2014,361,2344,0,0
1,2014,361,2345,0,0
1,2014,361,2346,0,0
1,2014,361,2347,0,0
1,2014,361,2348,0,0
1,2014,361,2349,0,0
1,2014,361,2350,0,0
1,2014,361,2351,0,0
1,2014,361,2352,0,0
1,2014,361,2353,0,0
1,2014,361,2354,0,0
1,2014,361,2355,0,0
1,2014,361,2356,0,0
1,2014,361,2357,0,0
1,2014,361,2358,0,0
1,2014,361,2359,0,0
1,2014,361,2400,0,0
24,2014,361,2400,12.34
1,2014,365,2359,0,9
1,2014,365,2400,089.343,3
1,2015,1,1,234,456
1,2015,1,2,090,99
1,2015,365,2359,0,0
1,2015,365,2400,xx,xxx
1,2016,1,1,0,0
1,2016,1,2,0,0
1,2016,1,3,0,0
Eu suponho que a solução é um monte de sed / awk aninhado em um loop for, mas vou deixar isso para você ninjas de código. Agradecemos antecipadamente.
Ok, aqui está a mesma pergunta, mas estendida para incluir o "e se" depois que o novo ano chegar. Então eu suponho que a coluna de $ 2 será incrementada entre 365 e 366, e isso obviamente não é desejável.
Como faço para estender o mesmo incremento / formatação para incluir um rollover 366 para incrementar o ano em 1?
Eu vou tentar cegamente:
#!/bin/bash
filename="${1/.dat/_prepped.dat}"
awk '/^1/{print $0}' $1 |cut -d "," -f2,3,4,5,6 |
awk 'BEGIN{FS=OFS=","}
$3 == "2400" {$2 = $2 + 1; $3 = 0}
$2 == "366" {$1 = $1 + 1; $2 = 1}
{ $3 = sprintf("%04i", $3) }
1' >$filename
Eu tentei integrar tudo em um script que eu alimentei os dados brutos (ex: home.dat) para gerar o arquivo (ex: home_prepped.dat).
Resultados dos dados acima que passam pelo script acima:
2014,361,2340,0,0
2014,361,2341,0,0
2014,361,2342,0,0
2014,361,2343,0,0
2014,361,2344,0,0
2014,361,2345,0,0
2014,361,2346,0,0
2014,361,2347,0,0
2014,361,2348,0,0
2014,361,2349,0,0
2014,361,2350,0,0
2014,361,2351,0,0
2014,361,2352,0,0
2014,361,2353,0,0
2014,361,2354,0,0
2014,361,2355,0,0
2014,361,2356,0,0
2014,361,2357,0,0
2014,361,2358,0,0
2014,361,2359,0,0
2014,362,0000,0,0
2014,365,2359,0,9
2015,1,0000,089.343,3
2015,1,0001,234,456
2015,1,0002,090,99
2015,365,2359,0,0
2016,1,0000,xx,xxx
2016,1,0001,0,0
2016,1,0002,0,0
2016,1,0003,0,0