以下作品:
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
s。
那是怎么回事?似乎Pandas存储df3
与df1
不同,即使它们看起来相同,.drop_duplicates()
方法将df3
转换为规范形式。(?)有什么想法吗?