problem z utworzeniem wykresu w Python

0

Cześć, mam pewien problem, próbuje utworzyć wykres w pythonie lecz ciągle wyrzuca mi błędem

can't multiply sequence by non-int of type 'float'

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import pandas as pd
np.set_printoptions(suppress=True)

data = pd.read_csv('countries_of_the_world.csv')
data = data.dropna()
f1 = data['Literacy (%)'].values
f2 = data['Arable (%)'].values
f5= data['Crops (%)'].values
"""
f3= data['Coastline (coast/area ratio)'].values
f4= data['Industry'].values
f5= data['Crops (%)'].values
f6= data['Pop. Density (per sq. mi.)'].values
f7= data['Population'].values
"""
for i in range(len(f1)):
    if "," in f1[i]:
        f1[i]=float(f1[i].replace(",","."))
for i in range(len(f2)):
    if "," in str(f2[i]):
        f2[i]=float(f2[i].replace(",","."))
for i in range(len(f5)):
    if "," in str(f5[i]):
        f5[i]=float(f5[i].replace(",","."))
f1=np.array(f1)
f2=np.array(f2)
f5=np.array(f5)
fig = plt.figure(figsize=(10,8))
ax = Axes3D(fig)
ax.scatter(f1, f2, f5)
plt.show()
0

Rozumiem że nie łaska pokazać gdzie? Błąd mówi że robisz coś w stylu [1,2,3] * 1.1 a tak nie wolno bo nie miałoby to specjalnie sensu.

0

właśnie nie pokazuje w jakiej linijce jest błąd... Tylko wywala tym errorem i koniec

0

Niemożliwe, Pokaż cały kod i cały Stack Trace.

0

właśnie nie pokazuje w jakiej linijce jest błąd...

Musi, od tego jest stack trace. Inna sprawa, że powie Ci w którym momencie kod się wywalił, a nie, gdzie Ty walnąłeś pierwotnie babola.

Dopiero wczoraj albo przedwczoraj ktoś miał identyczny błąd i wszystko sprowadzało się do przecinka zamiast kropki w jakimś zahardkodowanym współczynniku, przez co zamiast ułamka delikwent dostawał tuple. Upewnij się, że nie robisz czegoś podobnego i zamiast liczby nie dostajesz listy, seta, tupla albo czegoś.

Robisz tam jakieś dziwaczne konwersje przecinków na kropki na stringach - takim dziwadłom bym się w pierwszej kolejności przyjrzał.

0

screenshot-20190605214613.png

tutaj zrzut, a kod w całości to ten co wrzuciłem

0

Tak w ogóle, to czemu robisz te dziwne konwersje zamiast po ludzku wykorzystać pandas.to_numeric i ew. jakieś opcje?

0

Czy to co jest na górze to jest proj3d.py? Gdzie jest linijka vecw = np.dot(M, vec)?

1

A, no tak. Że też wcześniej nie zauważyliśmy - robisz konwersję str do float tylko, jeśli ten str zawiera przecinek. Zgadnij, co się stanie, jeśli jeden z nich będzie miał wartość "1234" i nie zostanie skonwertowany?

>>> x = "1234"
>>> x * 1.1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'float'
>>>

Możesz podczas wczytywania pliku CSV dorzucić opcję decimal="," i pandas posprząta za Ciebie, oszczędzając Ci dziwacznych konwersji. to_numeric jednak się wywala i nie daje nawet jakichś dodatkowych opcji by określić decimal tam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1