You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas读取.xlsx列时误将浮点值识别为Datetime的解决方法

解决Pandas读取Excel时将数值列识别为datetime的问题

针对你遇到的Excel列因格式问题被Pandas误识别为datetime类型的情况,以下是几种无需修改源文件的解决方法,适配你的Pandas 1.4.4、Python 3.8及依赖版本:

方法1:使用converters参数强制转换列类型

通过自定义转换函数,将被识别为datetime的值转换回Excel对应的浮点数值,同时兼容正常的浮点值:

import pandas as pd
from datetime import datetime

def convert_to_float(val):
    # 处理被识别为datetime的情况
    if isinstance(val, datetime):
        # Excel日期以1899-12-30为基准(兼容Excel的闰年bug),计算对应的浮点值
        excel_epoch = datetime(1899, 12, 30)
        time_delta = val - excel_epoch
        return time_delta.total_seconds() / (24 * 3600)
    # 处理原本就是数值/字符串的情况
    try:
        return float(val)
    except (ValueError, TypeError):
        return pd.NA  # 无法转换的返回空值

# 读取Excel时指定转换器
df = pd.read_excel("your_file.xlsx", converters={"USDC Amount USDC": convert_to_float})

方法2:用openpyxl直接读取原始数值

绕过Pandas的自动类型推断,直接通过openpyxl读取单元格的原始值,再替换到DataFrame中:

from openpyxl import load_workbook
import pandas as pd

# 加载Excel文件,data_only=True获取单元格的实际值(忽略格式)
wb = load_workbook("your_file.xlsx", data_only=True)
ws = wb.active

# 获取表头,定位目标列的索引(openpyxl列是1-based)
headers = [cell.value for cell in ws[1]]
target_col = headers.index("USDC Amount USDC") + 1

# 提取目标列的所有数据(从第2行开始)
target_data = []
for row in ws.iter_rows(min_row=2, min_col=target_col, max_col=target_col, values_only=True):
    target_data.append(row[0])

# 读取整个Excel,然后替换目标列
df = pd.read_excel("your_file.xlsx")
df["USDC Amount USDC"] = pd.Series(target_data).astype(float)

方法3:指定engine并调整读取参数

如果你的Excel是.xls格式,可尝试使用xlrd引擎读取;对于.xlsx格式,优先使用openpyxl引擎配合data_only=True的方式,能更可靠地忽略格式影响。

注意事项

  • 确保目标列的实际值都是可转换为float的数值,若存在非数值内容,需在转换函数中做额外处理。
  • data_only=True仅读取单元格的计算结果,若目标列包含公式,需确保公式已计算完成。

内容的提问来源于stack exchange,提问作者EllipticalInitial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:41:30