Как проверить в какой тип возможно преобразовать переменную Python

Всем привет, столкнулся с такой проблемой. Я считываю файл Excel, в котором имеются данные разных типов (Дата, Число, Число с плавающей запятой и Строка). Считываю при помощи библиотеки xlrd, и разумеется все данные считываются в строку. Далее, мне необходимо преобразовать эту строку, в тот тип данных, в котором они были в Excel, другими словами, мне необходимо проверить, возможно ли преобразовать считанную строку в int, float или datetime. Я написал вот такой код, и он работает.

workbook = xlrd.open_workbook('input.xlsx', 0)
sh = workbook.sheet_by_index(0)
for i in range(11, 12):
    for j in range(sh.ncols - 1):
        cll = sh.cell_value(rowx=i, colx=j)
        try:
            # Сначала проверяем можно ли сделать из этого дату старше 2010 года
            # Если да, то записываем
            if xlrd.xldate.xldate_as_datetime(sh.cell_value(rowx=i, colx=j), workbook.datemode).year > 2010:
                cll = xlrd.xldate.xldate_as_datetime(sh.cell_value(rowx=i, colx=j), workbook.datemode)
            else:
                raise TypeError
        except TypeError:
            try:
                # Теперь проверяем можно ли из этого сделать Int
                cll = int(sh.cell_value(rowx=i, colx=j))
            except ValueError:
                try:
                    # Теперь проверяем, можно ли из этого сделать Float
                    cll = float(sh.cell_value(rowx=i, colx=j))
                except ValueError:
                    # Если ничего не получилось, оставляем строкой
                    cll = str(cll)
        print(cll, type(cll))

Однако, я думаю этот код можно написать как нибудь проще, тем более, количество разных типов может увеличиться, и придется еще и еще увеличивать уровень вложенности. Подскажите, возможно ли как - нибудь проще реализовать проверку, в какой тип данных возможно преобразовать строковую переменную? Заранее спасибо всем за ответы.


Ответы (1 шт):

Автор решения: MaxU

Откройте для себя Pandas:

import pandas as pd

df = pd.read_excel("filename.xlsx")
print(df) # данные
print(df.dtypes) # типы данных столбцов

PS Pandas хорошо угадывает правильные типы данных столбцов для числовых и строковых данных. Для дат нужно указать список наименований столбцов, которые нужно парсить как дату/время:

df = pd.read_excel("filename.xlsx", parse_dates=[0,3,5]) # Pandas попытается спарсить столбцы 1, 4 и 6 как дату/время
→ Ссылка