2016-04-23 173 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')) 

不要分裂的事情了到不同的列表中,它们像日期和时间一样属于一个整体

相关问题