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

如何阻止PowerBI中Python脚本自动将列转换为float类型

解决PowerQuery中Python脚本自动转换19位文本ID为Float的问题

问题本质

19位数字超出了Pandas默认Int64类型的存储上限(Int64最大可存储9223372036854775807,约9e18),当PowerQuery把数据传递给Pandas时,Pandas会自动将这类大数字推断为Float类型,导致ID显示为科学计数法且丢失精度——哪怕你的脚本根本没操作ID列。

可行解决方案

1. 在Python脚本开头强制转换ID列为字符串

直接在脚本里把ID列转为字符串类型,从根源阻止Pandas的自动类型推断:

import re
import pandas as pd

# 强制将ID列转为字符串,替换成你实际的ID列名
dataset['ID'] = dataset['ID'].astype(str)

# 原有业务逻辑
dataset['urls'] = dataset['fizz'].str.findall(r'https\S*')
dataset = (dataset.explode('urls').dropna(axis=0, subset=['urls']))

2. 在PowerQuery中提前锁定文本类型

在运行Python脚本前,确保PowerQuery里ID列的类型是文本:

  • 选中ID列,点击「转换」→「数据类型」→「文本」
  • 保留PowerQuery自动生成的类型转换步骤,确保这一步在Python脚本步骤之前执行
    这样Pandas接收数据时,ID列会被识别为字符串,不会触发数值类型转换。

3. 用astype批量指定列类型

如果有多个需要保留文本类型的列,可以一次性指定:

import re
import pandas as pd

# 批量指定列类型,ID列设为字符串
dataset = dataset.astype({'ID': str})

# 原有业务逻辑
dataset['urls'] = dataset['fizz'].str.findall(r'https\S*')
dataset = (dataset.explode('urls').dropna(axis=0, subset=['urls']))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:01:44