如何阻止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
相关产品推荐
相关产品推荐

