微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 如何只乘以列中的数值

>我使用pd.read_excel()读取Excel文件
>其中一列称为“能量供应”,包含字符串和数字
>我使用以下代码

能源中的x [‘能源供应’]:
     打印(式(X))

结果样本是:

<class 'str'>
<class 'int'>
<class 'float'>

我需要将此列中的数值乘以一百万.

我尝试了以下代码,但它没有说明:

unorderable types: str() > int()

for x in energy['Energy Supply']:
    if type(x) != 'str':
        while x>0:
            x = x*1000000

我试过了:

energy['Energy Supply'].select_dtypes(include=['int64']) * 1000000

但它说:

AttributeError: ‘Series’ object has no attribute ‘select_dtypes’

我试过了:

energy['Energy Supply'] = [x * 1000000 for (type(x)=='int' 
                                            & x in energy['Energy Supply'])]

但得到了语法错误.

两者都没有工作:

energy.multiply(1000000, axis='Energy Supply', level=None, fill_value=None)

以下行不会给我错误,但它没有做任何事情:

energy[energy.select_dtypes(include=['number']).columns] *= 1000000

如果有人能帮助我如何做到这一点,我真的很感激.

解决方法:

您可以使用maskto_numericnotnull创建的掩码:

energy = pd.DataFrame({'Energy Supply':[10, 1.0,'a']})
print(energy)
  Energy Supply
0            10
1             1
2             a

mask = pd.to_numeric(energy['Energy Supply'], errors='coerce').notnull()
print (mask)
0     True
1     True
2    False
Name: Energy Supply, dtype: bool

一个解决方案是检查类型

mask = energy['Energy Supply'].apply(lambda x: type(x) in [int, float])
print (mask)
0     True
1     True
2    False
Name: Energy Supply, dtype: bool

energy['Energy Supply'] = energy['Energy Supply'].mask(mask, 
                                                       energy['Energy Supply'] * 1000000)
print (energy)
  Energy Supply
0      10000000
1         1e+06
2             a

相反,掩码可以使用loc仅选择数值:

print (energy.loc[mask, 'Energy Supply'])
0    10
1     1
Name: Energy Supply, dtype: object

energy.loc[mask, 'Energy Supply'] = energy.loc[mask, 'Energy Supply'] * 1000000
print (energy)
  Energy Supply
0      10000000
1         1e+06
2             a

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐