为什么PandasDataFrame允许使用太大的Series设置列?

tquggr8v  于 2023-01-24  发布在  其他
关注(0)|答案(1)|浏览(114)

当使用列表设置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进行测试。

1aaf6o9v

1aaf6o9v1#

你说得对,listnp.array之间的行为是不同的,但这是意料之中的。
如果您查看一下frame.py模块的源代码,您会发现,如果值是list,则它会检查长度,而在np.array中,它不会检查长度,并且正如您所观察到的,np.array较大,它会被截断。

***注意:**此处提供了np.array截断的详细信息 *

相关问题