Интересная проблема. Вот как я бы подошел к этому, предполагая, что соответствующие столбцы названы size
и time
:
size_data = df['size'].str.extract('([\d\.]+)\B(\w?B)').rename(columns={0: 'size_amount', 1: 'size_multiplier'})
time_data = df['time'].str.extract('([\d\.]+)\B(\w?s)').rename(columns={0: 'time_amount', 1: 'time_multiplier'})
size_mapping = {'B': 1 / (1024 ** 2), 'KB': 1 / 1024, 'MB': 1}
time_mapping = {'ms': 1, 'us': 1e-3}
df['size'] = size_data ['size_amount'].astype(float) * size_data ['size_multiplier'].map(size_mapping)
df['time'] = time_data ['time_amount'].astype(float) * time_data ['time_multiplier'].map(time_mapping)
print(df)
Выход:
path size time
0 prefix/up17/strided_slice_1 0.000004 0.015
1 prefix/fres16/conv_b_1x3/weights 0.192002 0.012
2 prefix/fres16/conv_a_3x1/weights 0.192002 0.012
3 prefix/up20/weights 0.064004 0.012
4 prefix/fres15/conv_b_1x3/weights 0.192002 0.011
5 prefix/fres18/conv_b_3x1/weights 0.047998 0.011
6 prefix/fres7/conv_b_3x1/weights 0.047998 0.011
7 prefix/fres5/conv_a_3x1/weights 0.047998 0.011
8 prefix/fres13/conv_b_1x3/weights 0.192002 0.011
9 prefix/fres18/conv_b_1x3/weights 0.047998 0.011
10 prefix/fres5/conv_a_1x3/weights 0.047998 0.011
11 prefix/fres14/conv_a_3x1/weights 0.192002 0.011
12 prefix/fres7/conv_a_1x3/weights 0.047998 0.011
13 prefix/fres10/conv_b_1x3/weights 0.192002 0.011
14 prefix/fres14/conv_b_1x3/weights 0.192002 0.011
15 prefix/fres4/conv_b_3x1/weights 0.047998 0.011
16 prefix/d2/conv/weights 0.027002 0.011
17 prefix/fres19/conv_a_1x3/weights 0.047998 0.011
18 prefix/fres13/conv_a_1x3/weights 0.192002 0.011
19 prefix/fres11/conv_a_1x3/weights 0.192002 0.011
20 prefix/fres21/conv_b_3x1/weights 0.002998 0.011
21 prefix/fres12/conv_b_3x1/weights 0.192002 0.011
22 prefix/fres22/conv_b_3x1/weights 0.002998 0.011
23 prefix/fres18/conv_a_1x3/weights 0.047998 0.011
24 prefix/fres9/conv_a_3x1/weights 0.192002 0.011
Если вы хотите добавить другие единицы или изменить базовый блок, просто измените size_mapping
и / или time_mapping
.