2016-07-16 8 views
1

Ich möchte eine Spalte, die mir die verstrichene Zeit seit der ersten Zeile (1.5.2002 um 6.00 Uhr), bis zum letzten (20. November 2006 um 14.00 Uhr) erzählt. Wie kann ich eine extra Spalte erstellen, die mir die seit dem 1.5.2002 vergangenen Stunden anzeigt? Hier ist mein Datenrahmen:Wie kann ich die Stunden in einer CSV-Datei angeben?

  Date Time (HHMM)   Site Plot Replicate Temperature \ 
1  5/1/2002   600 Barre Woods 21   7   4.5 
2  5/1/2002   600 Barre Woods 31   9   6.5 
3  5/1/2002   600 Barre Woods 10   2   5.3 
4  5/1/2002   600 Barre Woods  2   1   4.0 
5  5/1/2002   600 Barre Woods 13   4   5.5 
6  5/1/2002   600 Barre Woods 11   3   5.0 
7  5/1/2002   600 Barre Woods 28   8   5.0 
8  5/1/2002   600 Barre Woods 18   6   4.5 
9  5/1/2002   1400 Barre Woods  2   1   10.3 
10  5/1/2002   1400 Barre Woods 31   9   9.0 
11  5/1/2002   1400 Barre Woods 13   4   11.0 
12  5/1/2002   1400 Barre Woods 18   6   6.5 
13  5/1/2002   1400 Barre Woods 11   3   10.3 
14  5/1/2002   1400 Barre Woods 10   2   10.5 
15  5/1/2002   1400 Barre Woods 28   8   10.3 
16  5/1/2002   1400 Barre Woods 21   7   10.5 
17  5/1/2002   1400 Barre Woods 16   5   10.3 
18 5/22/2002   600 Barre Woods 13   4   6.5 
19 5/22/2002   600 Barre Woods 18   6   5.8 
20 5/22/2002   600 Barre Woods  2   1   5.5 
...   ...   ...   ... ...  ...   ... 
710 11/20/2006   1400 Barre Woods 31   9   7.4 
+1

Tun Sie etwas wie das http://stackoverflow.com/questions/22923775/calculate-pandas-dataframe-time-difference-between-zweicolumns-in-hours-and-minu ... und warum sollten Sie setzen Ihre Frage fett gedruckt? – Sumido

Antwort

1

Ganz einfach:

  • die Datei lesen,
  • das Datum und die Zeit analysieren,
  • berechnen das Delta mit der ersten Datum/Uhrzeit,
  • schreiben Sie das Ergebnis.

Hier ist eine Implementierung dateiähnliche Objekte für die Demo mit:

import datetime 
import io 

data = """\ 
     Date Time (HHMM)   Site Plot Replicate Temperature 
1  5/1/2002   600 Barre Woods 21   7   4.5 
2  5/1/2002   600 Barre Woods 31   9   6.5 
3  5/1/2002   600 Barre Woods 10   2   5.3 
710 11/20/2006   1400 Barre Woods 31   9   7.4 
""" 

date_fmt = "%m/%d/%Y %H%M" 
fisrt_date = None 

with io.StringIO(data) as src_file, io.StringIO(data) as dst_file: 

    # copy the header 
    dst_file.write(next(src_file)) 

    for line in src_file: 
     parts = line.strip().split() 
     if not parts: 
      dst_file.write(line) 
      continue 

     timestamp = parts[1] + " " + parts[2] 
     curr_date = datetime.datetime.strptime(timestamp, date_fmt) 
     if fisrt_date is None: 
      fisrt_date = curr_date 
     delta = curr_date - fisrt_date 
     dst_file.write(line.strip() + " " + str(delta) + "\n") 

    print(dst_file.getvalue()) 

Sie erhalten:

 Date Time (HHMM)   Site Plot Replicate Temperature 
1  5/1/2002   600 Barre Woods 21   7   4.5 0:00:00 
2  5/1/2002   600 Barre Woods 31   9   6.5 0:00:00 
3  5/1/2002   600 Barre Woods 10   2   5.3 0:00:00 
710 11/20/2006   1400 Barre Woods 31   9   7.4 1664 days, 8:00:00 

Natürlich können Sie das Format der Delta-Werte ändern.

+0

Ich konvertierte die CSV-Datei in Strings-Format und ich bekomme einen Fehler bei der Zeitstempel-Prozess, es sagt mir: "IndexError: Liste Index außerhalb des Bereichs" –

+0

@Sergio Espejo: Post das Code-Beispiel und verwandte Stack-Trace Debug. Falls Sie wirklich eine CSV-Datei haben, sollten Sie das Python-Modul [cvs] (https://docs.python.org/2/library/csv.html) verwenden. –

+0

So sieht mein String aus: '{"0": "Datum", "1": "Zeit (HHMM)", "2": "CO2-Rh"}' Ich bekomme immer den Fehler: " IndexError: Listenindex außerhalb des Bereichs " Auch nachdem ich pdb.run ('mymodule.test()' ausgeführt habe) –

Verwandte Themen