TypeError: невозможно привести данные массива из dtype('‹U1') в dtype('float64') в соответствии с правилом "безопасно"

При попытке построить выбросы, используя разные цвета на диаграмме рассеяния, я столкнулся с этой ошибкой:

TypeError: невозможно преобразовать данные массива из dtype ('U1') в dtype ('float64') в соответствии с правилом «безопасно»

Мой код:

import statsmodels.api as sm
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

CRP = pd.read_csv('CarsProp.csv')

priceMean = CRP.price.mean()
priceStd = CRP.price.std()   

CRP['isOutlierPrice'] = np.nan
testColumn1 = abs(CRP.price - priceMean) > 2*priceStd

for i, value in enumerate(testColumn1):
    if value == True:
        CRP['isOutlierPrice'][i] = 1

mileageMean = CRP.mileage.mean()
mileageStd = CRP.mileage.mean()

CRP['isOutlierMileage'] = np.nan
testColumn2 = abs(CRP.mileage - mileageMean) > 2*priceStd

for i, value in enumerate(testColumn2):
    if value == True:
        CRP['isOutlierMileage'][i] = 1

outlierPmsJoint = ((CRP['isOutlierPrice'] == 1) | (CRP['isOutlierMileage'] == 1))

colorChoiceDict = {True: (1.0, 0.55, 0.0, 1.0), 
              False: (0.11, 0.65, 0.72, 0.1)}

colorCol = [colorChoiceDict[val] for val in outlierPmsJoint]

PriceFloat = [float(val) for val in CRP.price]
MileageFloat = [float(val) for val in CRP.mileage]

plt.figure()
plt.scatter(PriceFloat, MileageFloat, c = colorCol, linewidth='0')
plt.set_title('Price vs. Mileage with outliers')  

Кто-нибудь знает, где проблема и как ее решить? Спасибо,


person Linh    schedule 06.10.2018    source источник
comment
Было бы неплохо предоставить строку ошибки... Или немного больше информации о стеке...   -  person Jonathan Gagne    schedule 06.10.2018
comment
Я использую Spyder, и он не говорит, в какой именно строке ошибка (хотя в других случаях это так).   -  person Linh    schedule 06.10.2018
comment
См. минимальный воспроизводимый пример или sscce.   -  person ImportanceOfBeingErnest    schedule 06.10.2018


Ответы (1)


Проблема была в линии разброса графика. Должен быть:

plt.scatter(PriceFloat, MileageFloat, c = colorCol, linewidth=0)

Я помещал аргумент ширины строки в кавычки, что не дало результата. Однако сообщение об ошибке было очень вводящим в заблуждение. В следующий раз я, вероятно, буду меньше обращать внимание на сообщение об ошибке при отладке.

person Linh    schedule 08.10.2018