Pandas创建含集合的列时集合被重复n次的技术问询
嘿,这个问题确实有点反直觉,我来帮你理清楚背后的逻辑~
首先,咱们先明确Pandas构造DataFrame时对不同输入类型的处理逻辑:
为什么列表的行为符合预期?
当你传入pd.DataFrame({'a': [1,2,3]})时,Pandas会识别到列表是有序的序列型可迭代对象,并且每个元素都是标量值。它会直接把列表的每个元素对应到列a的每一行,这也是文档中明确推荐的用法——列表、numpy数组、Series这类有序序列是构造DataFrame列的标准输入。
集合的特殊行为到底是怎么回事?
而集合的情况就不一样了:集合是无序且没有索引的可迭代对象,并不是Pandas设计时优先支持的输入类型。在Pandas 1.0.0中,当你把集合作为字典的值传入DataFrame构造函数时,它的处理逻辑是这样的:
- 先获取集合的元素数量(这里是3),以此确定要生成的行数;
- 把整个集合当作一个单一的标量对象,然后重复填充到每一行中,所以你会看到3行,每行都是完整的
{1,2,3}。
有没有文档说明?
很遗憾,在Pandas 1.0.0的官方文档里,确实没有专门针对集合作为字典值的详细说明。因为集合本身的无序特性和Pandas基于有序索引的设计理念不太契合,所以文档主要聚焦在列表、数组、Series这类有序输入的用法上,集合属于“非推荐输入”,相关行为也就没有特意标注。
如何得到你预期的(集合元素作为每行值)效果?
如果想要把集合的元素拆分成每行的话,只需要先把集合转换成列表就行:
pd.DataFrame({'a': list({1,2,3})})
不过要注意,因为集合是无序的,转换后的列表顺序是不确定的哦。
内容的提问来源于stack exchange,提问作者yatu
相关产品推荐
相关产品推荐

