Проблемы с convert_dtypes () из pandas - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь извлечь данные из файла .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 ниже. Есть ли способ сделать это, который не требует указания каждого типа столбцов индивидуально?

На рисунке ниже показана структура данных после того, как я извлек все свои данные.

Структура данных после извлечения

...