我有多个数据框(大约37个),并且想比较这些数据框的列名称,以便我知道它们所有的列和列顺序都相同。数据帧存储为对象列表(例如,tbl [0]是第一个数据帧,tbl [1]是第二个数据帧,依此类推)。
我编写了以下代码块,它将获取我的数据框(tbl)的每一列,并将它们与其他数据框的列进行比较,如果存在差异,则将这些数据框的索引附加到2D列表中,我可以稍后回想一下,以查看列不匹配的地方。
a = [[]]
for i in range(0,len(tbl)):
for j in range(i+1, len(tbl)):
if(~(tbl[i].columns.equals(tbl[j].columns))):
a.append([i, j])
但是,当我运行上面的代码时,它将附加我正在比较的所有数据帧索引。我在这里做错什么吗?
示例:
tbl = []
for i in range(0,3):
tbl.append(pd.DataFrame({'a':[1,2,3],'b':[3,4,5], 'c':[7,8,3], 'd':[1,5,3]}))
a = [[]]
for i in range(0,len(tbl)):
for j in range(i+1, len(tbl)):
if(~(tbl[i].columns.equals(tbl[j].columns))):
a.append([i, j])
出于这个问题,我创建了3个虚拟数据框,它们具有相同的列名(a,b,c,d)。当使用前面提到的代码比较列名时,得到以下输出:
[[], [0, 1], [0, 2], [1, 2]]
我应该得到一个空名单吗?我在这里做什么错了?
答案 0 :(得分:1)
使用if not
与bool scalars一起使用:
print (~True)
-2
a = [[]]
for i in range(0,len(tbl)):
for j in range(i+1, len(tbl)):
if not (tbl[i].columns.equals(tbl[j].columns)):
a.append([i, j])
print (a)
[[]]