将read_excel与转换器一起用于将Excel文件读取到Pandas DataFrame中会导致对象类型的数字列

将read_excel与转换器一起用于将Excel文件读取到Pandas DataFrame中会导致对象类型的数字列,第1张

将read_excel与转换器一起用于将Excel文件读取到Pandas DataFrame中会导致对象类型的数字列

让我们

converters
暂时删除该参数-

c = ['Energy Supply', 'Energy Supply per Capita', '% Renewable']df = pd.read_excel("Energy Indicators.xls",         skiprows=17,         skip_footer=38,         usecols=[2,3,4,5],         na_values=['...'],         names=c,        index_col=[0])df.index.name = 'Country'df.head()         Energy Supply  Energy Supply per Capita  % RenewableCountry      Afghanistan  321.010.0    78.669280Albania      102.035.0   100.000000Algeria     1959.051.0     0.551010American Samoa NaN NaN     0.641026Andorra        9.0          121.0    88.695650df.dtypesEnergy Supply    float64Energy Supply per Capita    float64% Renewable      float64dtype: object

没有转换器,数据加载就很好。有一个技巧可以理解为什么会发生这种情况。

默认情况下,

pandas
将读入该列并尝试“解释”您的数据。通过指定自己的转换器,可以覆盖熊猫转换,因此不会发生这种情况。

熊猫将整数和字符串值传递到了

convert_energy
,因此
isinstance(energy,float)
永远不会求到
True
。而是
else
运行,并且这些值按原样返回,因此您得到的列是字符串和整数的混合。如果
print(type(energy))
在函数内部放一个,这很明显。

由于您混合使用类型,因此结果类型为

object
。但是,如果您不使用转换器,熊猫将尝试解释您的数据,并将成功将其解析为数字。

因此,只需-

df['Energy Supply'] *= 1000000

会绰绰有余。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5673737.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存