Я начну с того, что добавлю свой код, а затем объясню, чего я пытаюсь достичь:
names = [
'ABX-B767-200BDSF (767-3A)',
'ABX-B767-200BDSF (DAR 767-3A)',
'ABX-B767-200BDSF (DAR 767-4)',
]
i1 = pd.read_csv(f'{path}/{files[0]}', skiprows=4, nrows=1)
i2 = pd.read_csv(f'{path}/{files[1]}', skiprows=4, nrows=1)
i3 = pd.read_csv(f'{path}/{files[2]}', skiprows=4, nrows=1)
df_list = [i1, i2, i3]
cl1 = pd.Series(df_list[0].columns.values, name=names[0])
cl2 = pd.Series(df_list[1].columns.values, name=names[1])
cl3 = pd.Series(df_list[2].columns.values, name=names[2])
col_list = [cl1, cl2, cl3]
final_frame = pd.concat([df for df in col_list], axis=1)
final_frame.fillna('', inplace=True)
Да, я знаю, что это неэффективно и долго, пожалуйста, поработайте со мной.
Мои фактические данные имеют больше, чем эти 3 серии, у меня их 11, но для простоты я показываю код только так, как если бы у меня было три.
Прямо сейчас мой вывод выглядит так:
ABX-B767-200BDSF (767-3A) ABX-B767-200BDSF (DAR 767-3A) ABX-B767-200BDSF (DAR 767-4)
0 Offset Offset Offset
1 A/C NUMBER A/C NUMBER 10 MI RANGE SEL CAPT
2 A/C TYPE A/C TYPE 10 MI RANGE SEL F/O
3 A/P CAUTION FCC-C A/P CAUTION FCC-C 160 MI RANGE SEL CAPT
4 A/P CAUTION FCC-L A/P CAUTION FCC-L 160 MI RANGE SEL F/O
и мне нужно, чтобы это выглядело так:
ABX-B767-200BDSF (767-3A) ABX-B767-200BDSF (DAR 767-3A) ABX-B767-200BDSF (DAR 767-4)
0 OFFSET OFFSET OFFSET
1 10 MI RANGE SEL CAPT
2 10 MI RANGE SEL F/O
3 160 MI RANGE SEL CAPT
…
13 A/C NUMBER A/C NUMBER
14 A/C TYPE A/C TYPE
Где значения совпадают по строкам, а строки, которые не совпадают, заполняются пробелами. Я пытался использовать слияние с большим разбросом аргументов, и мне просто не повезло. Любые идеи, как получить желаемый результат здесь?
По запросу .head(10) моих cl1, 2, 3:
cl1.head(10).to_dict()
{0: 'Offset',
1: 'A/C NUMBER',
2: 'A/C TYPE',
3: 'A/P CAUTION FCC-C',
4: 'A/P CAUTION FCC-L',
5: 'A/P CAUTION FCC-R',
6: 'A/P CMD C ENGA FCC-C',
7: 'A/P CMD C ENGA FCC-L',
8: 'A/P CMD C ENGA FCC-R',
9: 'A/P CMD C ENGA MCP'}
cl2.head(10).to_dict()
{0: 'Offset',
1: 'A/C NUMBER',
2: 'A/C TYPE',
3: 'A/P CAUTION FCC-C',
4: 'A/P CAUTION FCC-L',
5: 'A/P CAUTION FCC-R',
6: 'A/P CMD C ENGA FCC-C',
7: 'A/P CMD C ENGA FCC-L',
8: 'A/P CMD C ENGA FCC-R',
9: 'A/P CMD C ENGA MCP'}
cl3.head(10).to_dict()
{0: 'Offset',
1: '10 MI RANGE SEL CAPT',
2: '10 MI RANGE SEL F/O',
3: '160 MI RANGE SEL CAPT',
4: '160 MI RANGE SEL F/O',
5: '20 MI RANGE SEL CAPT',
6: '20 MI RANGE SEL F/O',
7: '40 MI RANGE SEL CAPT',
8: '40 MI RANGE SEL F/O',
9: '5 MI RANGE SEL CAPT'}
Изображение не является Минимальный воспроизводимый пример
Мы не можем произвести правильный вывод из неправильного вывода, нам нужен входы.
Спасибо за комментарии с просьбой не использовать картинки, я не знал, что stackoverflow так сложно работать с картинками. У меня нет кадра данных из желаемого результата, я просто знаю, как мой босс хочет, чтобы они выглядели. @BeRT2me BeRT2me Я не уверен, о чем ты здесь просишь.
reindex
каждую серию в основной списокconcat
переиндексированная серияsrs_list = [cl1, cl2, cl3]
master = pd.concat(srs_list).drop_duplicates()
parsed_list = [srs.to_frame().set_index(srs).reindex(master) for srs in srs_list]
output = pd.concat(parsed_list,axis=1).reset_index(drop=True)
>>> output
ABX-B767-200BDSF (767-3A) ABX-B767-200BDSF (DAR 767-3A) \
0 Offset Offset
1 A/C NUMBER A/C NUMBER
2 A/C TYPE A/C TYPE
3 A/P CAUTION FCC-C A/P CAUTION FCC-C
4 A/P CAUTION FCC-L A/P CAUTION FCC-L
5 A/P CAUTION FCC-R A/P CAUTION FCC-R
6 A/P CMD C ENGA FCC-C A/P CMD C ENGA FCC-C
7 A/P CMD C ENGA FCC-L A/P CMD C ENGA FCC-L
8 A/P CMD C ENGA FCC-R A/P CMD C ENGA FCC-R
9 A/P CMD C ENGA MCP A/P CMD C ENGA MCP
10 NaN NaN
11 NaN NaN
12 NaN NaN
13 NaN NaN
14 NaN NaN
15 NaN NaN
16 NaN NaN
17 NaN NaN
18 NaN NaN
ABX-B767-200BDSF (DAR 767-4)
0 Offset
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
10 10 MI RANGE SEL CAPT
11 10 MI RANGE SEL F/O
12 160 MI RANGE SEL CAPT
13 160 MI RANGE SEL F/O
14 20 MI RANGE SEL CAPT
15 20 MI RANGE SEL F/O
16 40 MI RANGE SEL CAPT
17 40 MI RANGE SEL F/O
18 5 MI RANGE SEL CAPT
Благодарю вас! Я двигался в этом направлении с основным списком, но вы определенно сэкономили мне часы экспериментов и поисков в Google!
Предоставьте образцы данных с
i1.head(10).to_dict()
и то же самое дляi2
иi3