我使用pd.read_excel()
其中一列称为“能源供应”,包含字符串和数字
我使用以下代码:
for x in energy['Energy Supply']: print(type(x))
结果样本是:

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

我需要在这一列的数值上乘以一百万。
我试过下面的代码,但是说不出来:
无序类型: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”对象没有“select\u 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_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

另一个解决方案是checktypes
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/

10-16 05:18