我正在处理这个数据框:
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']
中的整个列表。