簡體   English   中英

ufunc 'divide' 不支持輸入類型......嘗試獲取 NumPy 平均值時出現錯誤問題

[英]ufunc 'divide' not supported for the input types...... error problem while trying to get the NumPy average

我是 Numpy 的新手,我一直在嘗試獲取從另一個數組派生的數組的平均值。

這是給我錯誤的代碼:“ufunc 'divide' 不支持輸入類型,並且根據轉換規則 ''safe'' 無法將輸入安全地強制轉換為任何受支持的類型”

import numpy as np
import pandas as pd
​
cars = pd.read_csv('data/co2_emissions_canada.csv')
cars_makes = cars['Make'].to_numpy()
cars_models = cars['Model'].to_numpy()
cars_classes = cars['Vehicle Class'].to_numpy()
cars_engine_sizes = cars['Engine Size(L)'].to_numpy()
cars_cylinders = cars['Cylinders'].to_numpy()
cars_transmissions = cars['Transmission'].to_numpy()
cars_fuel_types = cars['Fuel Type'].to_numpy()
cars_fuel_consumption = cars['Fuel Consumption Comb (L/100 km)'].to_numpy()
cars_co2_emissions = cars['CO2 Emissions(g/km)'].to_numpy()
​
#the median of the cars_engine_sizes
print(np.median(cars_engine_sizes))

#the average fuel consumption for regular gasoline (Fuel Type = X), #premium gasoline (Z), ethanol (E), and diesel (D)? 

fuel_typesx=np.array(cars_fuel_types[cars_fuel_types=='X'])
print(np.average(fuel_typesx))

fuel_typesz=np.array(cars_fuel_types[cars_fuel_types=='Z'])
print(np.average(fuel_typesz))

fuel_typese=np.array(cars_fuel_types[cars_fuel_types=='E'])
print(np.average(fuel_typese))

請問,我錯過了什么

我猜完整的錯誤消息看起來像這樣:

In [753]: np.average(np.array(['A','B','C','A'],dtype=object))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [753], in <cell line: 1>()
----> 1 np.average(np.array(['A','B','C','A'],dtype=object))

File <__array_function__ internals>:5, in average(*args, **kwargs)

File ~\anaconda3\lib\site-packages\numpy\lib\function_base.py:380, in average(a, axis, weights, returned)
    377 a = np.asanyarray(a)
    379 if weights is None:
--> 380     avg = a.mean(axis)
    381     scl = avg.dtype.type(a.size/avg.size)
    382 else:

File ~\anaconda3\lib\site-packages\numpy\core\_methods.py:191, in _mean(a, axis, dtype, out, keepdims, where)
    189         ret = ret.dtype.type(ret / rcount)
    190 else:
--> 191     ret = ret / rcount
    193 return ret

TypeError: ufunc 'true_divide' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

cars_fuel_types來自 dataframe,顯然包含像“E”這樣的字符串。 所以它是object 即使你 select 喜歡值,你也不能取“平均值”。

average取值的總和並除以計數。 python 字符串的sum是連接,而不是某種數學。

In [754]: np.sum(np.array(['A','B','C','A'],dtype=object))
Out[754]: 'ABCA'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM