Python-pandas-DataFrame报错–FutureWarning:Could not cast to float64, falling back to object
提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。
详细的 DataFrame:
DataFrame全系列分享(使用.特点.说明.外部文件数据.取值.功能函数.统计函数)
链接: DataFrame全系列分享
文章目录
错误
sys:1: FutureWarning: Could not cast to float64, falling back to object. This behavior is deprecated. In a future version, when a dtype is passed to ‘DataFrame’, either all columns will be cast to that dtype, or a TypeError will be raised
先直译,方便理解错误:
警告:无法转换为float64,退回到对象。此行为已被弃用。在未来的版本中,当将数据类型传递给“DataFrame”时,所有列都将转换为该数据类型,或者将引发TypeError(类型错误)
重点就是:您在操作数据的时候,数据里面有非浮点型的数据(float64)。现在它没办法把这个数据转成浮点型,然后就把数据类型转成object对象了。
这句话里面但凡加粗的 数据 两字。表示同一个东西,重点可放这个数据上面来阅读理解
示例01
#准备数据 列表
listData = [['bangbangzhi',1],['hello',2],['python',3]]
#将列表交给pd声明DataFrame
#columns=指定列名 dtype=指定数据类型 为float
myDf02 = pd.DataFrame(listData,columns=['name','number'],dtype=float)
#我的数据里面有字符串
print(myDf02)
#也没有异常终止运行,还是执行完毕了

示例02
#定义一个列表,两个字符串类型的 一个int整数的,一个字符串类型的拼音
listData = ["1",'2',3,'bangbangzhi']
#循环遍历这个列表 i表示每一次循环,对应每一个列表的值
for i in listData:
#输出内容
print(float(i))
#和pandas-DataFrame关系不大,主要看报错。整理思路
执行了三次循环正常的,把1,2,3都转成了小数float的类型。
拼音没法转成小数float,报了ValueError的异常

它异常终止了。那就好办了,知道了问题,平时异常怎么解决的。用的try,所以:
正常使用的时候,pandas不会程序终止报错,但是处理可以:
解决
使用try
listData = ["1",'2',3,'bangbangzhi']
for i in listData:
try:
print(float(i))
except ValueError:
print("这个数据:"+str(i)+",不能转float")
#pandas一般不用try这么处理,它不会异常终止。所有数据类型,它都能操作
#且pandas用这个方法,except 里面执行啥呢,这个数据还存不存,算不算
#看这文章最上面的示例01,它自动转成了object。如果就是必须转float,看下一个方案
#其他pandas详细使用,查看帮帮志文章:详细分享pandas

to_numeric函数
如果你确定你的数据 都必须应该被转换为float64,但有些值可能无法转换,你可以使用pandas库的to_numeric函数。这个函数会将无法转换的值设置为NaN(Not a Number)
语法:
pandas.to_numeric(arr, errors=‘raise’, downcast=None)
arr:要转换的 Series 或 DataFrame 列。
errors:指定如何处理无法转换的数据。可选值有 ‘raise’(默认,抛出异常)、‘coerce’(将无法转换的数据设置为 NaN) 和 ‘ignore’(保持原样)。
downcast:指定是否将数据类型降级为更小的类型,例如: ‘integer’、‘signed’、‘unsigned’、‘float’ 等。
import pandas as pd
#声明一个列表
listData = ["1",'2',3,'bangbangzhi']
#生成DataFrame(表格数据),且指定列名是data
myDf = pd.DataFrame(listData,columns=['data'])
print(myDf)
#将这个data列里面的数据 转成float。‘coerce’(将无法转换的数据设置为 NaN)
newDf=pd.to_numeric(myDf['data'],errors='coerce')
print("------隔开一下------")
print(newDf)

FutureWarning
如果不关心无法转换的值,你可以简单地忽略FutureWarning。这个警告本身并不会影响你的代码运行,只是可能会在控制台输出一些警告信息。你可以使用warnings库的filterwarnings函数来忽略FutureWarning。比如这篇文章的:示例01
import pandas as pd
import warnings
#这个FutureWarning级别的,不看~
warnings.filterwarnings('ignore', category=FutureWarning)
listData = [['bangbangzhi',1],['hello',2],['python',3]]
#将列表交给pd声明DataFrame
#columns=指定列名 dtype=指定数据类型 为float
myDf02 = pd.DataFrame(listData,columns=['name','number'],dtype=float)
#我的数据里面有字符串
print(myDf02)

总结
(会陆续更新非常多的IT技术知识及泛IT的电商知识,可以点个关注,共同交流。ღ( ´・ᴗ・` )比心)
(也欢迎评论,提问。 我会依次回答~)


2103

被折叠的 条评论
为什么被折叠?



