Поскольку вы представляли файл Excel без верхней строки, я предположил, что он содержит только строки данных без имен столбцов.
Поэтому я создал файл Excel, содержащий часть ваших исходных данных, прочитайте его Вызов:
df = pd.read_excel('Input.xlsx', header=None)
и получил:
0 1 2 3 4 5 6 7 8 9
0 401042-0000 NaN NaN Masonry Accessories 30105.05 57928.1 NaN NaN NaN NaN
1 401043-0100 NaN NaN Brick Masonry unit 763897.00 1237457.0 NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN 401079-0000 Joint sealers 18514.6 53145.0
3 NaN NaN NaN NaN NaN NaN 401088-0000 Glazing 0.0 0.0
4 401160-0200 NaN NaN Conducts 198961.00 198961.0 NaN NaN NaN NaN
5 401160-0400 NaN NaN Low Voltage Cables 36403.00 36403.0 NaN NaN NaN NaN
Задача, которую нужно выполнить, может быть выражена как:
- в каждой строке,
- заполнить столбец 0 (updateit) значением из первого последующего соответствия столбца
\d{6}-\d{4}
шаблон, - , если имеется.
Для этого я определил Следующая функция, которая будет применена к каждой строке:
def mtch(row):
s = row.iloc[1:].str.match(r'\d{6}-\d{4}').fillna(False)
indLst = s[s].index.tolist()
return row.loc[indLst[0]] if len(indLst) > 0 else np.nan
Когда вы применяете ее, вызывая: df.apply(mtch, axis=1)
, результат будет:
0 NaN
1 NaN
2 401079-0000
3 401088-0000
4 NaN
5 NaN
dtype: object
Таким образом, чтобы обновить столбец 0 in df , запустите:
df[0].update(df.apply(mtch, axis=1))
Теперь, когда вы print(df)
результат:
0 1 2 3 4 5 6 7 8 9
0 401042-0000 NaN NaN Masonry Accessories 30105.05 57928.1 NaN NaN NaN NaN
1 401043-0100 NaN NaN Brick Masonry unit 763897.00 1237457.0 NaN NaN NaN NaN
2 401079-0000 NaN NaN NaN NaN NaN 401079-0000 Joint sealers 18514.6 53145.0
3 401088-0000 NaN NaN NaN NaN NaN 401088-0000 Glazing 0.0 0.0
4 401160-0200 NaN NaN Conducts 198961.00 198961.0 NaN NaN NaN NaN
5 401160-0400 NaN NaN Low Voltage Cables 36403.00 36403.0 NaN NaN NaN NaN
Итак, теперь столбец 0 заполнены 2 пропущенных поля.
Редактировать
Из вашей второй картинки (упомянутой в комментарии) я вижу, что вы, должно быть, сделали некоторые операции, приводящие к очень странному результату.
Обратите внимание:
- левая часть содержит данные, которым предшествуют имена столбцов ( Безымянный: 0 thru Безымянный: 7 и КОММЕНТАРИЙ (пока все в порядке),
- , но правая часть содержит строки данных без имен столбцов,
- и эффект, что первая строка в вашем файле Это смесь имен столбцов и данных.
Я думаю, что этот вопрос - хороший материал для другого вопроса. Это плохая привычка ставить один вопрос и затем постепенно «расширять» его другими вопросами, не упомянутыми ранее.