Как прочитать файл h5, чтобы сохранить множество фреймов данных в файл Excel - PullRequest
0 голосов
/ 01 мая 2020

У меня есть файл h5, содержащий пути узлов, такие как «События / Походка / Нижняя конечность / Начальный контакт Далее» Количество строк каждого пути узла не одинаково (25 строк, 113 строк, 21 строка, 1 строка, 22 строки или 15744 строки), так как количество столбцов также не одинаково. Я ищу, чтобы объединить значения всех узлов пути, который имеет одинаковое количество строк в кадрах данных с удалением скобок, а затем сохранить его на многих листах в файле Excel. Кроме того, я хочу разделить каждый элемент в каждом кадре данных, который имеет более одного компонента, по многим столбцам, прежде чем сохранить его в файл Excel. Пожалуйста, не надо, количество компонентов каждого элемента не одинаково.

Этот пример объясняет, что я собираюсь сделать. Этот набор данных содержит (4 столбца и 3 строки):

1 - кадр данных 2 - лист 2 - файл Excel 1:

имя / одно имя / два имени / три имени1432 / фу

(192,26949,) (34,56,) (435,54,436,65,87,3,5432) (1,2,)

(189,4033245, ) (58,654,) (45,51,56,612, 54253,543, 54,321) (1,54)

(184,4593252,) (6543,6543,) (45,58,56,6412,654,876,765,66543) (1543,5,)

Датафрейм 1 - лист 1 - файл Excel 1 должен быть таким же, как перед сохранением в файл Excel. Приведенный выше кадр данных должен быть преобразован в 7 столбцов и 3 строки.

имя / одно имя / два имени / три1

192.26949 34.56 435.54

189.4033245 58.654 45,51

184.4593252 6543.6543 45.58

имя / three2 name / three3 name / three4 name1432 / fou
436.65 87.3 5432 1.2

56.612 54253.543 54.321 1.54

56.6412 654.876 765.66543 1543.5

Код ниже объясняет, что я сделал У меня просто проблема удалить все скобки и запятые и разделить каждый элемент, который содержит более одного элемента, на два или более двух столбцов перед сохранением кадров в файл Excel:

dfd = {}  
#{1:df1,5:df2,113:df3<-add col} 

def print_attrs(name, obj):
    global dfd
    if '<class \'h5py._hl.dataset.Dataset\'>' == str(type(obj)):
        k= str(len(obj))
        if k not in dfd.keys():
            df = pd.DataFrame()
            #print(name,"Adding new key for len ", k)
        else:
            df = dfd[k]
        df[name] = obj
        df[name] = re.findall(r"\'([A-Za-z]+)\'", df[name])

        df[name] = " ".join(df[name])

        dfd[k] = df      
        l = len(obj[0])

f = h5py.File('walking5.h5', 'r')
f.visititems(print_attrs)

writer = pd.ExcelWriter('hd5excelout120.xlsx', engine = 'xlsxwriter')
for k, df in dfd.items():
    print(k,len(df))
    df.to_excel(writer, sheet_name = 'sheet_len_'+k)
writer.save()
writer.close()

Мне нужно к вашей помощи, чтобы решить эту проблему.

...