通过IIUC,您可以创建布尔掩码,并将值通过astype转换为字符串,然后与-进行比较.最后用-填充来自另一个DataFrame的值-mask或where,并通过〜反转掩码:
mask = df_1.astype(str) == '-'
print (mask)
A B C
0 False False False
1 True False False
2 False False True
print (df_1.mask(mask, df_2))
A B C
0 x 1 2
1 y 6 1
2 z 9 8
print (df_1.where(~mask, df_2))
A B C
0 x 1 2
1 y 6 1
2 z 9 8
通过评论编辑:
一种可能的解决方案是su79eu7k,谢谢:
masks = [('A', r'[a-zA-Z]'), ('B', r'\d'), ('C', r'\d')];
print pd.concat([~(df_1[col].astype(str).str.contains(regex)) for col, regex in masks], axis=1)
另一个解决方案是创建掩码-首先从fillna可能的NaN值开始,然后是从字典到NaN的replace丢失值,最后找到isnull值.
import pandas as pd
import numpy as np
df_1 = pd.DataFrame({'A': ['