当使用列表设置DataFrame列时,panda引发ValueError异常,而当使用Series时,panda不引发ValueError异常,这是有原因的吗?导致多余的Series值被忽略(例如,下面示例中的7)。
>>> import pandas as pd
>>> df = pd.DataFrame([[1],[2]])
>>> df
0
0 1
1 2
>>> df[0] = [5,6,7]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Python310\lib\site-packages\pandas\core\frame.py", line 3655, in __setitem__
self._set_item(key, value)
File "D:\Python310\lib\site-packages\pandas\core\frame.py", line 3832, in _set_item
value = self._sanitize_column(value)
File "D:\Python310\lib\site-packages\pandas\core\frame.py", line 4529, in _sanitize_column
com.require_length_match(value, self.index)
File "D:\Python310\lib\site-packages\pandas\core\common.py", line 557, in require_length_match
raise ValueError(
ValueError: Length of values (3) does not match length of index (2)
>>>
>>> df[0] = pd.Series([5,6,7])
>>> df
0
0 5
1 6
在Windows 10上使用Python 3.10.6和Pandas1.5.3进行测试。
1条答案
按热度按时间1aaf6o9v1#
你说得对,
list
和np.array
之间的行为是不同的,但这是意料之中的。如果您查看一下frame.py模块的源代码,您会发现,如果值是
list
,则它会检查长度,而在np.array
中,它不会检查长度,并且正如您所观察到的,np.array
较大,它会被截断。***注意:**此处提供了
np.array
截断的详细信息 *