<p>这里有一个正则表达式的解决方案。
首先,创建regex模式并将预编译regex对象的“match”方法放入df2:</p>
<pre><code>import re
rnum= r"^(?=^\d*.?\d*$)[\d\.]+$"
ralpha= r"(?i)^(?=.*[-_a-z])(?=.*\d)[-_a-z\d]+$"
rstr= r"(?i)^[-_a-z]+$"
df2["rx"]=df2.DATATYPE.replace({"string":re.compile(rstr).match, \
"AlphaNum":re.compile(ralpha).match, \
"Floatorint":re.compile(rnum).match})
</code></pre>
<p>然后从它们中创建一个dict并将其用于转换df1:</p>
<pre><code>d= dict(df2[["COL_NAME","rx"]].values)
r= df1[df1.transform(d).isna()]
Name Emp_Id Design Salary
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN Arch2 NaN
3 NaN Klgi NaN KL00
4 Mashy1 5670 NaN NaN
</code></pre>
<p>格式匹配,并添加“数据类型”列:</p>
<pre><code>r= r.stack().rename_axis(index=["row_num","col_name"]).reset_index(name="value")
r["data_type"]= df2.set_index("COL_NAME").loc[r.col_name,"DATATYPE"].values
r= r.reindex(columns=["col_name","value","data_type","row_num"])
col_name value data_type row_num
0 Design Arch2 string 2
1 Emp_Id Klgi AlphaNum 3
2 Salary KL00 Floatorint 3
3 Name Mashy1 string 4
4 Emp_Id 5670 AlphaNum 4
</code></pre>
<p>注意:您也可以在df2.rx中使用非regex函数。你知道吗</p>