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

如何在Pandas中处理批量合并Excel时浮点数被误解析为日期的问题

解决Pandas合并Excel时浮点数列被误解析为日期的问题

问题背景

批量合并Excel文件时,某列被Pandas自动解析为Datetime类型,但该列实际应为浮点数。原因是Excel将使用点作为小数分隔符的数值(如4.5)误识别为日期(显示为2021-04-05这类格式),修改Excel单元格格式为数字会得到无意义的日期序列号,无需逐个修改Excel文件,可直接在Pandas中修复。

合并代码:

path = ["/content/drive/MyDrive/Data REE/XLSX - GENERACIÓN","/content/drive/MyDrive/Data REE/XLSX - EMISIONES"]
lista = [1,2]
for i in range(2):
  lista[i] = pd.concat(map(pd.read_excel, glob.glob(path[i] + "/*.xlsx")))

示例DataFrame:

df = pd.DataFrame({'date':['2021-08-01','2021-08-02','2021-08-03','2021-08-04'],'Wind Energy':[0,0,0,0],'Charcoal':[122,125,128,130], 'Gas':['2021-04-05','2021-04-05','2021-04-05','2021-04-05']})

解决方案

方法1:从日期解析回目标浮点数

由于Excel将x.y格式的浮点数误识别为年-x-y的日期(年份为系统默认值),只需提取日期中的月份和日期,组合为x.y格式的浮点数:

# 确保列是datetime类型(若读取时已自动解析可跳过)
df['Gas'] = pd.to_datetime(df['Gas'])
# 月份作为整数部分,日期作为小数部分,转换为浮点数
df['Gas'] = df['Gas'].dt.month + df['Gas'].dt.day / 10

此方法适用于输入为一位小数的浮点数(如4.5对应日期2021-04-05),处理后直接得到原始浮点数。

方法2:强制读取为字符串后转浮点数

若Excel单元格实际存储的是文本(仅显示格式为日期),读取时指定列类型为字符串,再直接转换为浮点数:

# 自定义读取函数,指定目标列类型为字符串
def read_target_excel(file):
    return pd.read_excel(file, dtype={'Gas': str})

# 批量读取并合并
for i in range(2):
    lista[i] = pd.concat(map(read_target_excel, glob.glob(path[i] + "/*.xlsx")))

# 将字符串列转换为浮点数
for df in lista:
    df['Gas'] = df['Gas'].astype(float)

方法3:处理日期序列号

若Excel中存储的是日期序列号(修改格式为数字时显示的大数),先将序列号转换为日期,再按方法1处理:

# 假设列当前是数值类型(日期序列号)
df['Gas'] = pd.to_datetime(df['Gas'], origin='1899-12-30')  # Excel的基准日期
df['Gas'] = df['Gas'].dt.month + df['Gas'].dt.day / 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:03:33