2016-11-21 1 views
0

Ich versuche zu lernen, Pandas in Python zu verwenden. Ich habe Probleme, Mathe zu meinem Panda-Datenrahmen zu machen. Im Moment sieht mein Datenrahmen etwas wie folgt aus:Python Panda Fehler TypeError: nicht unterstützte Operandentypen für /: 'str' und 'int'

print (mark)

   0  1  2  3  4   5    6 
0  447366345 -2.04 -2.69 176.98 418.84 34.3167521 -118.4068498 
1  447406197 -2.34 -2.18 176.88 418.77 34.3167522 -118.4068499 
2  447446155 -2.63 -1.56 176.74 418.77 34.3167522 -118.4068499 
3  447486653 -2.89 -0.95 176.58 418.84 34.3167522 -118.4068499 
4  447526241 -3.12 -0.42 176.43 418.84 34.3167522 -118.4068499 
5  447566373 -3.34 -0.07 176.32 418.84 34.3167522 -118.4068497 
6  447606036 -3.56 0.05 176.26 418.66 34.3167523 -118.4068497 
7  447645783 -3.77 -0.03 176.28 418.66 34.3167523 -118.4068497 
8  447686269 -3.95 -0.31 176.43 418.95 34.3167523 -118.4068497 

def data_reader(filename, rowname): 
    with open(filename, newline='') as fp: 
     yield from (row[1:] for row in csv.reader(fp, skipinitialspace=True) 
      if row[0] == rowname) 

mike = pd.DataFrame.from_records(data_reader('data.csv', 'mike')) 

Nun wollen wir sagen, dass ich die Zeile 0 nehmen wollen und teilen sie durch 1000

mark_time = mark[0]/1000 

Dies erzeugt den Fehler

TypeError: unsupported operand type(s) for /: 'str' and 'int' 

Ich rate, weil aktuelle mein Datarame nicht als IN gilt T, also ging ich voran und tat dies:

mark_time = float (mark[0]/1000) 

Allerdings gab mir das auch den gleichen Fehler. Könnte mir bitte jemand erklären warum?

Meine zweite Frage ist, wenn es um das Plotten geht. Ich habe Matplotlib sehr gut gelernt und wollte es auf meinem Panda Dataframe verwenden. Derzeit ist die Art, wie ich es tue, ist dies:

fig1 = plt.figure(figsize= (10,10)) 
ax = fig1.add_subplot(311) 
ax.plot(mike_time, mike[0], label='mike speed', color = 'red') 
plt.legend(loc='best',prop={'size':10}) 

Kann ich nur mike_time ersetzen und mike [0] mit meinem Datenrahmen?

+5

Wirf den Typ 'mark [0] = mark [0] .type (int)' – EdChum

+5

'float (Marke [0])/1000' anstelle von' float (Marke [0]/1000) ' – MMF

+0

@MMFI habe diesen Fehler TypeError: kann die Serie nicht konvertieren in

Antwort

1

Sie müssen pandas.read_csv anstelle von Python csv verwenden.

Dort können Sie das dtype Argument verwenden Sie es mit den richtigen Typen von Daten bereitzustellen, um es zu verwenden, um:

Von Pandas documentation

dtype : Type name or dict of column -> type, default None Data type for data or columns. E.g. {'a': np.float64, 'b': np.int32} (unsupported with engine='python'). Use str or object to preserve and not interpret dtype.

Wenn Sie die CSV analysieren müssen außerhalb Pandas ein Import mit "from_records" können Sie coerce_float = True verwenden. Reference

coerce_float : boolean, default False Attempt to convert values to non-string, non-numeric objects (like decimal.Decimal) to floating point, useful for SQL result sets

+0

Ich habe das versucht, aber ich bekomme immer einen Fehler von: TypeError: 'Dtype' ist ein ungültiges Schlüsselwort Argument für diese Funktion. Die Art, wie ich es damit gemacht habe: csv.reader (fp, skipinitialspace = True, dtype = float) –

+1

Diese Antwort ist falsch, 'pd.read_csv' wird versuchen die dtypes durch Schnüffeln zu ermitteln, das OP benutzt' csv 'Modul das ist ganz anders – EdChum

+0

das ist wahr @EdChum Ich aktualisierte die Antwort – PabTorre

0

Sie benötigen Pandas read_csv zu verwenden, die automatisch die am besten geeignete Art zu jeder Spalte zuordnen. Wenn Sie gemischte Spalten haben, werden Sie gewarnt. Sie können es dann erneut ausführen, indem Sie den Typ explizit festlegen.

+0

Ich habe versucht, aber ich bekomme immer einen Fehler von: TypeError: 'Dtype' ist ein ungültiges Schlüsselwort Argument für diese Funktion. Die Art, wie ich es damit gemacht habe: csv.reader (fp, skipinitialspace = True, dtype = float –

+1

Sie verwenden csv.reader, das ist eine Python-Funktion. Sie müssen pandas.read_csv verwenden – simon

+1

Und Sie brauchen nicht die Funktion. Nur df = pd.read_csv ("data.csv") – simon

Verwandte Themen