2016-04-23 14 views
-4

Dieser Fehler bringt mich um und ich hoffe, dass einige von Ihnen helfen können.Ungültiges Literal für int() mit Basis 10: '2016-04-22'

Zum Start verarbeite ich amazon Bestellberichte für einen Kunden.

Ich ziehe die Bestelldaten heraus, die aus dem üblichen JJJJ-MM-TT H: M: S plus dem Zeitzonencode bestehen. Die Datetimes werden in eine Liste, und ich bin wie so über die Liste iterieren:

temps = list() 
for date_time in date_times: 
    temps.append(str(date_time).split('T')) 

dann durch die aufgespalten Datum mal ich iterieren und jeweils in eine separate Liste angehängt wird.

dates = list() 
times = list() 
for temp in temps: 
    dates.append(temp[0]) 
    times.append(temp[1]) 

In meinem Code, ich erhalte immer diese Fehlermeldung:

invalid literal for int() with base 10: '2016-04-22' 

Ich weiß, dass dies geschieht, wenn eine Zeichenfolge oder eine leere Zeichenfolge zu einem int jedoch zu konvertieren versuchen, alles, was ich habe, ist das Anfügen tun verdammt noch mal eine Liste. Was ist Fremder ist, dass dieses Skript seit über einem Monat ohne ein Problem läuft, so dass ich an diesem Punkt bin ich ratlos, warum es begann, dies plötzlich zu tun.

Das Skript ist auf pythonanywhere und wird automatisch mit den erforderlichen Paketen in einem virtualenv installiert, so dass alles andere über das Setup statisch ist. Jede Hilfe wird geschätzt.

EDIT: Hier ist der MVCE. Entschuldigung dafür, dass ich anfangs keins zur Verfügung gestellt habe. Sie können die files I'm using from this link. Sie ausführen, wie ihre Namen vorschlagen. good.txt analysiert gut und bad.txt löst den Fehler aus. Verwenden Sie scratchpad.py, um die Textdateien zu analysieren. Die Inhalte der beiden Textdateien werden normalerweise direkt von den Amazon-Servern in den Speicher eingelesen und von dort verarbeitet. Die Dateien auf dem obigen Link werden direkt von Amazon heruntergeladen und alles, was ich getan habe, wird von nicht notwendigen Informationen entfernt. Hier

ist der Stapel Zurückverfolgungs:

Traceback (most recent call last): 
    File "/home/jason/.virtualenvs/sw/lib/python3.4/site-packages/IPython/core/interactiveshell.py", line 2885, in run_code 
    exec(code_obj, self.user_global_ns, self.user_ns) 
    File "<ipython-input-18-4d933b0787fe>", line 1, in <module> 
    f = parse_report('/home/jason/Desktop/bad.txt') 
    File "<ipython-input-17-420ad5606095>", line 57, in parse_report 
    report.loc[:, 'purchase-date'] = dates 
    File "/home/jason/.virtualenvs/sw/lib/python3.4/site-packages/pandas/core/indexing.py", line 115, in __setitem__ 
    self._setitem_with_indexer(indexer, value) 
    File "/home/jason/.virtualenvs/sw/lib/python3.4/site-packages/pandas/core/indexing.py", line 473, in _setitem_with_indexer 
    setter(labels[0], value) 
    File "/home/jason/.virtualenvs/sw/lib/python3.4/site-packages/pandas/core/indexing.py", line 416, in setter 
    s._data = s._data.setitem(indexer=pi, value=v) 
    File "/home/jason/.virtualenvs/sw/lib/python3.4/site-packages/pandas/core/internals.py", line 2734, in setitem 
    return self.apply('setitem', **kwargs) 
    File "/home/jason/.virtualenvs/sw/lib/python3.4/site-packages/pandas/core/internals.py", line 2710, in apply 
    applied = getattr(b, f)(**kwargs) 
    File "/home/jason/.virtualenvs/sw/lib/python3.4/site-packages/pandas/core/internals.py", line 585, in setitem 
    values, value = self._try_coerce_args(self.values, value) 
    File "/home/jason/.virtualenvs/sw/lib/python3.4/site-packages/pandas/core/internals.py", line 1929, in _try_coerce_args 
    other = np.array(other, dtype='i8') 
ValueError: invalid literal for int() with base 10: '2016-04-22' 

EDIT # 2: pandas = '0.17.0'

+3

Bitte geben Sie einen [mcve] und den kompletten Traceback. – jonrsharpe

+0

Sieht nicht so aus, als könnte der Code, den Sie gepostet haben, den Fehler verursachen - können Sie das vollständige Traceback und ein bisschen mehr Code eingeben, um ein [mcve] (http://stackoverflow.com/help/mcve) zu erstellen –

+0

Sicher, Ich werde versuchen, etwas zusammenzusetzen. Das Problem ist, dass die Berichte Kundeninformationen enthalten, die ich (offensichtlich) nicht teilen werde und der Gesamtcode über 1000 Zeilen beträgt und mit dem Amazon-Server interagiert. –

Antwort

0

Ich habe herausgefunden, wie man das Skript repariert. Dies geschieht nur, wenn der Bericht eine einzelne Bestellung enthält. Außerdem passiert es nur, wenn ich versuche, diesen einzelnen Zeitstempel in meinem Datenrahmen zu ersetzen. Es gibt also etwas, das zwischen dem Neuzuweisen von Werten zu einer bestehenden Reihe/Spalte und dem Weg, der auftritt, wenn ein Datenrahmen mit einer einzelnen Reihe existiert, nicht in Ordnung ist.

Die Lösung ist eine neue Spalte für die Stunden und Minuten ein und verwenden String-from-Zeit in geeigneter Weise zu formatieren:

df.insert(loc=10, 
      column='purchase-time', 
      value=df.loc[:, 'purchase-date'].dt.strftime("%H:%M")) 

Dann benennen Sie die vorhandene Spalte (die später gelöscht werden):

df = df.rename(columns={'purchase-date': 'old-purchase-date'}) 

Der Einsatz einer anderen Spalte und Format nach Bedarf:

df.insert(loc=2, 
      column='purchase-date', 
      value=df.loc[:, 'old-purchase-date'].dt.strftime("%Y-%m-%d")) 

Jetzt Die Spalte kann gelöscht werden:

df = df.drop('old-purchase-date', 
      axis=1) 

Dies funktioniert für Berichte mit einer einzigen Bestellung oder mehrere Aufträge. Danke dir allen für deine Hilfe und Vorschläge, ihr alle seid sehr konstruktiv, hilfsbereit und einfach nur genial, ich habe viel von euch gelernt;)

-1

Verwenden Sie das Datumzeit-Modul Datetimes zu analysieren:

date_and_times = [] 
for date_time in date_times: 
    date_and_times.append(datetime.datetime.strptime(date_time, '%Y-%m-%dT%H:%M:%S')) 

Und die Dinge nicht aufgespalten in verschiedene Listen, die wie Daten und Zeiten zusammen gehören.

Verwandte Themen