У меня есть CSV-файл, состоящий из 5 полей.
Некоторые примеры данных:
market_name,vendor_name,price,name,ship_from
'Greece',03wel,1.79367196,huhif,Germany
'Greece',le,0.05880975,fdfd,Germany
'Mlkio',dpg,0.11344859,fdfd,Germany
'Greece',gert,0.18655316,,Germany
'Tu',roland,0.52856728,fdfsdv,Germany
'ghuo',andy,0.52856728,jhjhj,Germany
'ghuo',didier,0.02085452,fsdfdf,Germany
'arsen',roch,0.02578377,uykujkj,Germany
'arsen',dpg,0.10010169,wrefrewrf,Germany
'arsen',dpg,0.06415609,jhgjhg,Germany
'arsen',03wel,0.02578377,gfdgb,Germany
'giar',03wel,0.02275039,gfhfbf,Germany
'giar',03wel,0.42751765,sdgfdgfg,Germany
В этом файле есть несколько записей для каждого поставщика. Я хочу найти каждое уникальное значение поля vendor_name
, а также рассчитать среднее значение price
для каждого поставщика. Я использую следующий скрипт:
import pandas as pd
import numpy as np
import csv
from random import randint
ds = pd.read_csv("sxedonetoimo2.csv",
dtype={"vendor_name": object, "name" : object,
"ship_from" : object, "price": object})
ds['ship_from']=ds.ship_from.str.lower()
print(ds.dtypes)
pd.to_numeric(ds['price'], errors='coerce')
d = { 'name': pd.Series.nunique,
'ship_from' : lambda x: randint(1,2) if (x==('eu'or'europe'or'eu'or'europeanunion'or'worldwide'or'us'or'unitedstates'or'usa'or'us'or'ww'or'wweu'or'euww'or'internet')).any() else randint(3,20)
,'price': ds.groupby('vendor_name')['price'].mean()
}
result = ds.groupby('vendor_name').agg(d)
result.to_csv("scaled_upd.csv")
Но я получаю эту ошибку:
повышение DataError («Нет числовых типов для агрегирования»)
pandas.core.base.DataError: Нет числовых типов для агрегирования
В моем CSV-файле значения цены поля являются только числами. Если я изменю тип этого поля на float
, возникнет ошибка, что конкретная строка не может быть проанализирована. Я действительно смущен. Любая помощь?