由于"日期"列而无法将列表插入数据帧?



我正在处理这个数据框:

P       Q        date
0  [2, 3, 4]  [2, 2]   2019-3-18
1      [fff]     [2]   2019-3-18
2         []     [2]  2019-10-24
3     [4, 5]     [2]    2019-1-1

我可以很容易地转换任何列表,不管它有多少元素。例如:

df.loc[1,'Q']=[5,6]
p>
P       Q        date
0  [2, 3, 4]  [2, 2]   2019-3-18
1      [fff]  [5, 6]   2019-3-18
2         []     [2]  2019-10-24
3     [4, 5]     [2]    2019-1-1

但是,如果我将'date'列类型更改为datetime,代码就不再工作了:

df["date"] = pd.to_datetime(df["date"])
df.loc[2,'Q']=[5,6]
File "...", line 18, in <module>
df.loc[2,'Q']=[5,6]
File "C:UsersusuarioAppDataLocalProgramsPythonPython38-32libsite-packagespandascoreindexing.py", line 671, in __setitem__
self._setitem_with_indexer(indexer, value)
File "C:UsersusuarioAppDataLocalProgramsPythonPython38-32libsite-packagespandascoreindexing.py", line 1018, in _setitem_with_indexer
raise ValueError(
File "C:UsersusuarioAppDataLocalProgramsPythonPython38-32libsite-packagespandascoreindexing.py", line 1018, in _setitem_with_indexer
raise ValueError(
ValueError: Must have equal len keys and value when setting with an iterable

有什么办法可以避免这个错误吗?我真的很感激。

编辑:我刚刚发现使用。at代替。loc代码工作完美。它甚至允许您为任何类型的数据替换一个列表,而不仅仅是另一个列表。在这里找到的:Python pandas将列表插入单元格

这是一个解决方法,但它远非完美,并没有真正解决为什么会发生这种情况。

为了解决这个问题,将[:]添加到df.loc[2,'Q']。它应该看起来像这样:

df.loc[2,'Q'][:] = [5,6]

这个工作的原因是因为您指定要更改loc[2,'Q']中的整个列表。

相关内容

  • 没有找到相关文章

最新更新