以10为基数的int()无效的字面值:'2016-04-22'
这个错误正在杀死我,我希望你们中的一些人能够提供帮助。以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'
我想出了如何修复脚本。只有当报告包含单个订单时才会发生。此外,它只发生在我试图替换数据框中的单个时间戳时。因此,在将值重新分配给现有序列/列以及在存在具有单行的数据帧时发生的方式之间存在某些差异。
解决的方法是插入一个新列的小时和分钟,并使用字符串从时间适当地格式化:
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)
这适用于具有单个订单或多个订单的报告。谢谢大家的帮助和建议,你们都非常有建设性,乐于助人并且很简单,我从你那里学到了很多;)
使用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'))
不要分裂的事情了到不同的列表中,它们像日期和时间一样属于一个整体
请给出一个[mcve]和完整的追溯。 – jonrsharpe
看起来你所发布的代码可能会导致错误 - 你可以发布完整的回溯和多一点你的代码来制作一个[mcve](http://stackoverflow.com/help/mcve) –
当然,我会尽量把东西放在一起。问题是报告包含客户信息,我明显不会在这里共享,并且总代码超过1000行,并与亚马逊服务器 –