Я пытаюсь извлечь данные из файла .xlsx, который немного беспорядок. Мне удалось извлечь необходимые данные и записать их в файл Excel, но я бы очень хотел преобразовать числа в плавающие числа «на лету», чтобы я мог повторно использовать свой сценарий для других подобных случаев файлы.
Это то, что у меня пока есть:
import pandas as pd
from pathlib import Path
data_folder = Path("Data/")
file = data_folder / "Binder1.pdf.xlsx"
data = pd.read_excel(file, header=None, index_col=None)
Names = list(data.loc[data[0] == 'Injection Name:'] [2])
headers = data[data[1].astype(str).str.contains("Peak")].dropna(axis=1, how='all').
iloc[0, :].str.replace(r'\n', ' ')
subset = data[data[1].astype(str).str.contains("Compound")]
my_results = subset.dropna(axis=1, how='all')
my_results.index = Names
my_results.columns = headers
result = pd.DataFrame
for col in my_results:
str_results = my_results[col].astype(str).
str.replace('not valid', 'NotValid').str.replace('n.a.', '0').str.replace(r'\n', ' ')
str_final = str_results.str.split(' ').explode()
if not result.empty:
str_final_x = str_final.convert_dtypes()
result = pd.concat([result, str_final], axis=1, ignore_index=False)
else:
result = str_final.to_frame()
final = result[result['Peak Name'].astype(str).str.contains("Compound_X")]
final.to_excel("Output.xlsx")
Я надеялся, что .convert_dtypes () автоматически распознает тип данных столбца, но все выглядит как текст. Чтобы еще больше усложнить ситуацию, значения строк иногда записываются как «na», поэтому их следует заменить на 0 ниже. Есть ли способ сделать это, который не требует указания каждого типа столбцов индивидуально?
На рисунке ниже показана структура данных после того, как я извлек все свои данные.
Структура данных после извлечения