2016-10-27 8 views
0

Можно ли реплицировать структуру этого csv с помощью pandas.DataFrame?multiheader pandas dataframe

enter image description here

Все данные тянет из одного HDF5 файла, а затем разбора из атрибутов в pd.DataFrame

Мои опасения в том, что meta header и meta data (линии 1 и 2 в формате CSV) не соответствуют attribute header и attribute data длина или форма.

Вот как я назвал pd.DataFrame:

# 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) 

ли это быть лучше, чтобы создать два отдельных dataframes и затем укладывают их вертикально, чтобы создать третью dataframe и экспортировать окончательный один как CSV?

bueller?

ответ

1

Я думаю, вы можете сделать это через .to_csv(), так как этот метод принимает либо путь к файлу (как вы это сделали), либо буфер. Я предполагаю, что вы знаете порядок ваших мета-заголовков, метаданных и строк заголовков атрибутов, поэтому вы можете выбрать, как вы записываете их в файл. Ниже представлен фрагмент, который вам не хватает.

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)