2016-04-23 402 views
-4

這個錯誤正在殺死我,我希望你們中的一些人能夠提供幫助。以10爲基數的int()無效的字面值:'2016-04-22'

要開始我正在處理客戶的亞馬遜訂單報告。

我拉出了由通常的YYYY-MM-DD H:M:S加上時區代碼組成的訂單日期。該日期時間正在進入一個名單,我遍歷列表,像這樣:

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

然後我迭代通過拆分日期次,每次追加到一個單獨的列表。

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

在我的代碼,我不斷收到此錯誤:

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

我知道這個嘗試將字符串或空字符串轉換然而,一個int發生時,我做的是追加該死的東西列表。奇怪的是,這個腳本已經運行了一個多月沒有問題,所以我現在很茫然,爲什麼它突然開始這樣做。

該腳本位於pythonanywhere,並被設置爲自動運行,並在virtualenv中安裝必要的軟件包,所以關於該設置的所有其他內容都是靜態的。任何幫助表示讚賞。

編輯:這是mvce。道歉最初不提供。 你可以得到files I'm using from this link.他們的表現如他們的名字所示。 good.txt解析正常並且bad.txt拋出錯誤。使用scratchpad.py解析文本文件。這兩個文本文件的內容通常直接從Amazon服務器讀入內存,並從那裏進行處理。上述鏈接中的文件直接從亞馬遜下載,我所做的只是從中刪除非必要的信息。

這裏是堆棧回溯:

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' 

編輯#2: pandas = '0.17.0'

+3

請給出一個[mcve]和完整的追溯。 – jonrsharpe

+0

看起來你所發佈的代碼可能會導致錯誤 - 你可以發佈完整的回溯和多一點你的代碼來製作一個[mcve](http://stackoverflow.com/help/mcve) –

+0

當然,我會盡量把東西放在一起。問題是報告包含客戶信息,我明顯不會在這裏共享,並且總代碼超過1000行,並與亞馬遜服務器 –

回答

0

我想出瞭如何修復腳本。只有當報告包含單個訂單時纔會發生。此外,它只發生在我試圖替換數據框中的單個時間戳時。因此,在將值重新分配給現有序列/列以及在存在具有單行的數據幀時發生的方式之間存在某些差異。

解決的方法是插入一個新列的小時和分鐘,並使用字符串從時間適當地格式化:

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

然後重命名現有的柱(將在稍後刪除):

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

插入需要另一列和格式:

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

現在該列可以被刪除:

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

這適用於具有單個訂單或多個訂單的報告。謝謝大家的幫助和建議,你們都非常有建設性,樂於助人並且很簡單,我從你那裏學到了很多;)

-1

使用datetime-模塊來解析日期時間:

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

不要分裂的事情了到不同的列表中,它們像日期和時間一樣屬於一個整體

相關問題