gpt4 book ai didi

python - 如何只乘以一列中的数值

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:00 24 4
gpt4 key购买 nike

  1. 我使用 pd.read_excel() 读取 Excel 文件
  2. 其中一列名为“Energy Supply”,包含字符串和数字
  3. 我使用以下代码:

对于能量中的 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

如果有人可以帮助我如何做到这一点,我将不胜感激。

最佳答案

您可以使用 mask带有由 to_numeric 创建的掩码和 notnull :

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

mask 可以使用 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

关于python - 如何只乘以一列中的数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41918249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com