Pandas连接行为不一致

2024-04-26 22:30:00 发布

您现在位置:Python中文网/ 问答频道 /正文

以下工作:

df1 = pd.DataFrame([[1, 2, 3]], columns=['a', 'b', 'c'])
df2 = pd.DataFrame(columns=['a', 'b', 'c'])
pd.concat([df1, df2])

当然应该这样。但是,以下内容应该完全相同,但它不起作用:

od3 = OrderedDict([('a', [1]), ('b', [2]), ('c', [3])])
od4 = OrderedDict([('a', []), ('b', []), ('c', [])])
df3 = pd.DataFrame(od3)
df4 = pd.DataFrame(od4)
pd.concat([df3, df4])

这段代码产生

ValueError: Shape of passed values is (3, 1), indices imply (3, 0)

奇怪的是,这些都能起作用:

pd.concat([df3.drop_duplicates(), df4.drop_duplicates()])
pd.concat([df3, df4.drop_duplicates()])
pd.concat([df3.drop_duplicates(), df4])

尽管这些导致数据帧具有float64而不是int64

怎么回事?看起来,Pandas存储df3df1不同,即使它们看起来完全相同,而且.drop_duplicates()方法将df3转换为规范形式。(?)有什么想法吗?你知道吗


Tags: columns代码dataframedroppdordereddictdf1duplicates