Python “按位数据帧”&&引用;多列操作
我偶然发现了熊猫的以下行为,有人知道为什么输出有6列而不是3列吗Python “按位数据帧”&&引用;多列操作,python,pandas,Python,Pandas,我偶然发现了熊猫的以下行为,有人知道为什么输出有6列而不是3列吗 dfa = pd.DataFrame(dict(col1=[np.nan,1,1], col2=[np.nan,np.nan,np.nan], col3=[1,1,1])) dfb = pd.DataFrame(dict(col4=[1,np.nan,1], col5=[np.nan,np.nan,np.nan], col6=[np.nan,1,np.nan])) # output dfa.isnull() & dfb.
dfa = pd.DataFrame(dict(col1=[np.nan,1,1], col2=[np.nan,np.nan,np.nan], col3=[1,1,1]))
dfb = pd.DataFrame(dict(col4=[1,np.nan,1], col5=[np.nan,np.nan,np.nan], col6=[np.nan,1,np.nan]))
# output
dfa.isnull() & dfb.notnull()
col1 col2 col3 col4 col5 col6
0 False False False False False False
1 False False False False False False
2 False False False False False False
原因是列名称不同,所以它的工作方式类似于通过两个列名称的并集来重新索引,换句话说,类似于另一个缺少的行添加了
False
值:
c = dfa.columns.union(dfb.columns)
m = (dfa.isnull().reindex(c, fill_value=False, axis=1) &
dfb.notnull().reindex(c, fill_value=False, axis=1))
print (m)
col1 col2 col3 col4 col5 col6
0 False False False False False False
1 False False False False False False
2 False False False False False False
详细信息:
print (dfa.isnull().reindex(c, fill_value=False, axis=1))
col1 col2 col3 col4 col5 col6
0 True True False False False False
1 False True False False False False
2 False True False False False False
print (dfb.notnull().reindex(c, fill_value=False, axis=1))
col1 col2 col3 col4 col5 col6
0 False False False True False False
1 False False False False False True
2 False False False True False False
如果将它们更改为相同,则获取3列:
dfb.columns = dfa.columns
m = dfa.isnull() & dfb.notnull()
print (m)
col1 col2 col3
0 True False False
1 False False False
2 False False False
通过字典重命名列的解决方案:
d = dict(zip(dfb.columns, dfa.columns))
m = dfa.isnull() & dfb.rename(columns=d).notnull()
print (m)
col1 col2 col3
0 True False False
1 False False False
2 False False False
如果两个数据帧中的长度始终相同,则可以将其中一个数据帧转换为numpy数组:
m = dfa.isnull() & dfb.notnull().to_numpy()
print (m)
col1 col2 col3
0 True False False
1 False False False
2 False False False