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