
让我们
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
会绰绰有余。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)