我有2个数据框:a和b。
当我运行print(a.shape, b.shape)
时,得到以下结果:(1, 28849) (44, 29025)
意味着b比a具有更多的列。当我运行b.columns.difference(a.columns)
时,结果为空索引:(Index([], dtype='object'
)。运行a.columns.difference(b.columns)
时得到相同的结果。为什么数据框在形状上具有不同的列数,但它们之间没有任何不同的列?
答案 0 :(得分:3)
为什么数据框在形状上具有不同的列数,但没有 它们之间有不同的列吗?
空双向pd.Index.difference
不能保证2个数据帧中的列相同。考虑以下示例:
A = pd.DataFrame(columns=[1, 1, 2, 3, 4])
B = pd.DataFrame(columns=[1, 2, 3, 4])
A.columns.difference(B.columns) # Int64Index([], dtype='int64')
B.columns.difference(A.columns) # Int64Index([], dtype='int64')
可以将 pd.Index.difference
与set.difference
进行比较,即它不考虑重复项。如果您明确打印列,则应该看到它们是不同的。
或者,要显式计算每个列名的计数,可以使用numpy.unique
:
import numpy as np
print(np.unique(A.columns, return_counts=True))
(array([1, 2, 3, 4], dtype=int64), array([2, 1, 1, 1], dtype=int64))