2016-07-12 16 views
2

Ich arbeite an einem einfachen Data-Science-Projekt mit Python. Allerdings bin ich erhalte eine Fehlermeldung, die die folgenden:Python-Datenfehler: ValueError: ungültiges Literal für int() mit Basis 10: '42152129.0'

Valueerror: konnte nicht Zeichenfolge konvertieren zu schweben:

Hier ist, was mein Code wie folgt aussieht:

import matplotlib.pyplot as plt 
import csv 
from datetime import datetime 

filename = 'USAID.csv' 
with open(filename) as f: 
reader = csv.reader(f) 
header_row = next(reader) 

monies = [] 
for row in reader: 
    money = int(row[1]) 
    monies.append(money) 
print(monies) 

wenn ich die Zeile:

money = int(row[1]) to money = float(row[1]) 

ich diesen Fehler: Valueerror: konnte nicht Zeichenfolge konvertieren zu schweben: Hier sind meine Tracebacks: erste Fehler:

Traceback (most recent call last): 
File "funding.py", line 60, in <module> 
    money = int(row[1]) 
ValueError: invalid literal for int() with base 10: '42152129.0' 

Zweiter Fehler:

Traceback (most recent call last): 
File "funding.py", line 60, in <module> 
    money = float(row[1]) 
ValueError: could not convert string to float: 

Jede Hilfe wäre toll! Vielen Dank!

+0

Irgendein Grund, warum Sie dies nicht nur mit der Methode 'read_csv' von Pandas laden? 'df = pd.read_csv (Dateiname)'? Dies wird die entsprechenden 'dtypes' für Ihre Daten verwenden, außerdem können Sie danach einfach mit' astype' konvertieren: 'df ['col'] = pd.to_numeric (df ['col'], errors = 'coerce')' – EdChum

+0

Sie haben nicht gesagt, was Sie von Ihrem Code erwarten und warum? Fehler sind klar - ''42152129.0'' kann nicht eindeutig in int konvertiert werden (weil es keine gültige Zeichenfolgendarstellung von int ist),' '(leere Zeichenfolge) kann auch nicht eindeutig in float konvertiert werden. –

+0

Ich habe über die Verwendung von Pandas nachgedacht und bin seit ein paar Tagen dabei. Allerdings wollte ich die Daten noch plotten und bin mir noch nicht sicher, wie das bei Pandas zu machen ist. Ich möchte nur Daten von Finanzhilfen für bestimmte Länder darstellen, wobei die x-Achse Daten und die y die Geldmenge ist. –

Antwort

5

Der erste Fehler ist, weil Sie eine Zeichenfolge mit . drin an int() übergeben; Sie können das nicht in eine Ganzzahl umwandeln, da ein Dezimalteil vorhanden ist.

Der zweite Fehler ist auf einen unterschiedlichenrow[1] Zeichenfolgenwert zurückzuführen; eine, die leer ist.

Sie könnten für diesen Test:

if row[1]: 
    money = float(row[1]) 

Da Sie mit einem Daten Wissenschaft Projekt arbeiten Sie die pandas project verwenden laden Sie Ihre CSV statt mit DataFrame.read_csv() betrachten möchten.

+0

oder ein "Versuch-außer" Wrapper –

1

Einige der Einträge in row[1] sind leer, so dass Sie wahrscheinlich nach denen suchen möchten, bevor Sie versuchen, Besetzung. Übergeben Sie einen Standardwert von beispielsweise 0, wenn der Eintrag leer ist.

Dann sollten Sie in Betracht ziehen, decimal für Berechnungen zu verwenden, die sich auf Geld beziehen.

+1

@MartijnPieters OP arbeitet mit Geld.Grenzverluste sind nicht verhandelbar –

+0

Obwohl Pandas 'Dezimal' unterstützt, ist es ein wenig problematisch, ich würde bei den numpigen Typen wie' float' und 'float64' in diesem Fall bleiben – EdChum

+0

@MosesKoledoye: Fair genug. –

Verwandte Themen