2016-10-27 9 views
0

Ist es möglich, die Struktur dieser csv mit einer pandas.DataFrame zu replizieren?multiheader pandas dataframe

enter image description here

die Alle Daten werden von einer HDF5 Datei gezogen und Meine Bedenken Parsen aus dann die Attribute zu den pd.DataFrame

sind, dass die meta header und meta data (Linien 1 und 2 in der csv) nicht die attribute header und attribute data Länge oder Form übereinstimmen.

Hier ist, wie ich die pd.DataFrame genannt:

# Meta Pandas DataFrame 
    meta_df = pd.DataFrame(index=range(0, 8760, 24), columns=['source', 'location_id', 'state', 'country', 'latitude', 
                   'longitude', 'time_zone', 'elevation', 'clearsky_dhi', 
                   'clearsky_dni', 'clearsky_ghi', 'dewpoint_unit', 
                   'temperature_unit']) 
    # Meta Header & Data 
    meta_df['source'] = source 
    meta_df['location_id'] = location_id 
    meta_df['state'] = state 
    meta_df['country'] = country 
    meta_df['latitude'] = latitude 
    meta_df['longitude'] = longitude 
    meta_df['time_zone'] = local_time 
    meta_df['elevation'] = elevation 
    meta_df['clearsky_dhi'] = clearsky_dhi 
    meta_df['clearsky_dni'] = clearsky_dni 
    meta_df['clearsky_ghi'] = clearsky_ghi 
    meta_df['dewpoint_unit'] = dewpoint_unit 
    meta_df['temperature_unit'] = temperature_unit 

    # Attribute Pandas DataFrame 
    att_df = pd.DataFrame(index=range(0, 8760, 24), columns=['dhi', 'dni', 'ghi', 'source', 'dew_point', 'temperature']) 

    # Attribute Header & Data 
    att_df['year'] = year 
    att_df['month'] = month 
    att_df['day'] = day 
    att_df['hour'] = hour 
    att_df['minute'] = minute 
    att_df['dhi'] = dhi 
    att_df['dni'] = dni 
    att_df['ghi'] = ghi 
    att_df['dew_point'] = dew_point 
    att_df['temperature'] = temperature 

    # Make one DataFrame with multiple headers? 
    # Do something, then export to csv. 
    df.to_csv(ndir_root + ndir + '/' + fname + '.csv', index=False) 

ist es am besten sein, um zwei separate Datenrahmen und sie dann vertikal stapeln, um eine dritte Datenrahmen und exportieren Sie die endgültige als csv zu schaffen?

bueller?

Antwort

1

Ich denke, Sie können dies über .to_csv() tun, da diese Methode entweder einen Dateipfad (wie Sie es getan haben) oder einen Puffer akzeptiert. Ich nehme an, Sie kennen die Reihenfolge Ihrer Meta-Header, Metadaten und Attribut-Header-Strings, so dass Sie auswählen können, wie Sie diese in die Datei schreiben. Das Stück, das Sie vermissen, ist unten dargestellt.

with open('output.csv','w') as fid: 
    # write your meta header etc., here assumed to be a list of strings 
    fid.write(','.join(meta_header) + '\n') 
    fid.write(','.join(meta_data) + '\n') 
    fid.write(','.join(attribute_header) + '\n') 

    # now write attr_df to a csv by passing data to your fid buffer 
    attr_df.to_csv(fid, sep=',', header=False, index=False)