Python 以10为基数的int()的文本无效:“2016-04-22”

Python 以10为基数的int()的文本无效:“2016-04-22”,python,Python,这个错误要了我的命,我希望你们中的一些人能帮上忙 首先,我正在为客户处理amazon订单报告 我正在提取由通常的YYYY-MM-DD H:m:S加上时区代码组成的订单日期。datetimes进入一个列表,我在列表上迭代如下: temps = list() for date_time in date_times: temps.append(str(date_time).split('T')) 然后,我将遍历拆分日期时间,并将每个时间添加到一个单独的列表中 dates = list() t

这个错误要了我的命,我希望你们中的一些人能帮上忙

首先,我正在为客户处理amazon订单报告

我正在提取由通常的YYYY-MM-DD H:m:S加上时区代码组成的订单日期。datetimes进入一个列表,我在列表上迭代如下:

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。为最初没有提供一个道歉。 你可以从他们的名字中得到他们的表演。good.txt解析fine,bad.txt抛出错误。使用scratchpad.py解析文本文件。这两个文本文件的内容通常直接从Amazon服务器读取到内存中,并从那里进行处理。上面链接中的文件是直接从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'

使用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'))

不要把事情分成不同的列表,它们像日期和时间一样属于一起。

我找到了修复脚本的方法。仅当报表包含单个订单时才会发生。此外,只有当我试图替换数据帧中的单个时间戳时,才会发生这种情况。因此,将值重新分配给现有的系列/列与数据帧中只有一行时发生的方式之间存在一些问题

解决方案是为小时和分钟插入一个新列,并不时使用字符串来适当格式化:

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)

这适用于具有单个订单或多个订单的报告。谢谢你们的帮助和建议,你们都很有建设性,乐于助人,非常棒,我从你们身上学到了很多

请给出一个完整的回溯和完整的回溯。看起来你发布的代码不会导致错误-你能发布完整的回溯和更多的代码吗?为了确保,我会尝试把一些东西放在一起。问题是报告包含客户信息,我显然不会在这里分享,代码总数超过1000行,并且与AmazonServerInt交互时要求参数仅包含有效字符。对于基数10,只有0-9。不要共享所有代码,回溯得到行标识,@jornsharpe表示部分代码和回溯!