pandas构造DataFrame时为何支持传入collections.deque类型对象
你写的这段XML解析代码可以正常运行,核心原因是pandas构造DataFrame时,对传入的列数据并没有强制要求必须是list类型,底层逻辑如下:
- pandas的
DataFrame接收字典构造入参时,只要求字典的值是长度匹配的一维可迭代对象,不需要是list的子类。collections.deque本身实现了Python的迭代协议和序列协议,完全满足入参要求。 - 内部处理阶段,pandas会调用内置的
sanitize_array工具函数处理每一列的输入:不管传入的是list、deque、tuple还是其他自定义可迭代类型,只要支持遍历操作,都会被统一转换为numpy.ndarray格式再用于后续的列构造,整个过程不会校验输入是否为list的子类。 - 官方文档示例只标注
list只是因为这是最普遍的使用场景,不属于使用限制,实际只要是长度符合要求的可迭代对象都可以正常使用。
你可以自行做简单验证,以下代码也可以正常生成DataFrame:
from collections import deque import pandas as pd pd.DataFrame({'col1': deque([1,2,3]), 'col2': (4,5,6)})
内容的提问来源于stack exchange,提问作者Ning Jay
相关产品推荐
相关产品推荐

