由于“日期”列,无法将列表插入数据框中?

Posted

技术标签:

【中文标题】由于“日期”列,无法将列表插入数据框中?【英文标题】:Can't insert a list into a dataframe because of a 'date' column? 【发布时间】:2021-05-29 13:35:09 【问题描述】:

我正在使用这个数据框:

       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]

df:

          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

但是,如果我将“日期”列类型更改为日期时间,代码将不再起作用:

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:\Users\usuario\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\indexing.py", line 671, in __setitem__
self._setitem_with_indexer(indexer, value)
File "C:\Users\usuario\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\indexing.py", line 1018, in _setitem_with_indexer
raise ValueError(
 File "C:\Users\usuario\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\indexing.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 insert list into a cell

【问题讨论】:

我对我的回答并不满意,因为它只是一种解决方法,并没有回答为什么会发生这种情况的问题。通过玩耍,我发现每当它们是具有除对象以外的 dtype 的列时都会发生这种情况。 【参考方案1】:

这里有一个解决方法,但它远非完美,也没有真正解决发生这种情况的原因。

要解决此问题,请将[:] 添加到df.loc[2,'Q']。它应该是这样的:

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

之所以可行,是因为您指定要更改 loc[2,'Q'] 中的整个列表。

【讨论】:

我找到了更多关于窃听器的信息。报错原因是因为赋值不明确***.com/questions/23227171/…

以上是关于由于“日期”列,无法将列表插入数据框中?的主要内容,如果未能解决你的问题,请参考以下文章

Python:将两列数据框转换为一个插入列表[重复]

如何将文本框中的日期插入数据库

填补熊猫数据框中的日期空白

如何在 Spark 数据框中添加具有当前日期的额外列

如何使用 dateTimePicker 将日期插入 SQL 数据库日期列?

从 json 创建的 Pandas 数据框有未命名的列 - 由于未命名的列问题,无法插入 MySQL