大家好,我遇到了这个问题。我正在阅读一个 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))
但是,我认为这段代码可以用更简单的方式编写,特别是因为不同类型的数量可以增加,并且您将不得不越来越多地增加嵌套级别。告诉我,是否可以更容易地检查可以转换字符串变量的数据类型?提前感谢大家的回复。
发现熊猫:
P.S. Pandas 擅长猜测数字和字符串数据的正确列数据类型。对于日期,您需要指定需要解析为日期/时间的列名列表: