Python中Empty Series的FutureWarning:解析、修复及代码位置建议
解决Empty Series的FutureWarning问题
一、警告信息翻译与含义
警告翻译
FutureWarning: 未来版本中,空Series的默认数据类型将从'float64'改为'object'。请显式指定数据类型以消除此警告。conc = pandas.Series(list(zip(s1, s2)))
含义说明
这是pandas发出的兼容性警告:当前创建空Series时默认采用float64类型,但后续版本会将默认类型改为object。你使用的recordlinkage库内部代码在创建空Series时未显式指定数据类型,因此触发了该提示——并非你编写的代码直接导致,但需要处理以避免后续版本的兼容性问题。
二、修复方法
1. 升级recordlinkage库
最直接的解决方式是升级到该库的最新版本,开发者大概率已经修复了内部代码中未指定dtype的问题。执行以下命令:
pip install --upgrade recordlinkage
2. 过滤指定警告
如果升级后仍有警告,可以在代码开头添加过滤逻辑,屏蔽这个特定的FutureWarning:
import warnings from pandas.errors import FutureWarning warnings.filterwarnings("ignore", category=FutureWarning, message="The default dtype for empty Series will be 'object' instead of 'float64' in a future version.")
3. 清理冗余代码
你的代码里有一行单独的pd.Series(dtype='float64'),这行没有赋值给任何变量,完全无用,建议删掉——虽然它不是触发警告的原因,但清理冗余代码能让逻辑更清晰。
三、修改后的完整代码
import pandas as pd import recordlinkage import warnings from pandas.errors import FutureWarning # 过滤目标警告,放在代码开头即可 warnings.filterwarnings("ignore", category=FutureWarning, message="The default dtype for empty Series will be 'object' instead of 'float64' in a future version.") al_usa = pd.read_csv('al_all_reference_usa.dta.csv', index_col='id') al_sample = pd.read_csv('al_final.dta.csv', index_col='company_number', low_memory=False) indexer = recordlinkage.Index() indexer.block(left_on = 'state' , right_on = 'state') candidates = indexer.index(al_usa, al_sample) print(len(candidates)) compare = recordlinkage.Compare() compare.string('companyname', 'name', threshold=0.90, label='business') compare.string('state', 'state', threshold=0.90, label='state') features = compare.compute(candidates, al_usa, al_sample)
四、代码位置说明
- 警告过滤代码要放在所有业务代码之前,也就是导入必要库后立刻设置,确保pandas运行前就生效。
- 冗余代码直接删除即可,不影响原有逻辑。
内容的提问来源于stack exchange,提问作者econ_grad12345
相关产品推荐
相关产品推荐

