给出我要查找的数据框列表,以了解是否可以合并相似的表。
dummy_data1 = {
'id': ['1', '2', '3', '4', '5'],
'Feature1': ['A', 'C', 'E', 'G', 'I'],
'Feature2': ['B', 'D', 'F', 'H', 'J']}
dummy_data2 = {
'id': ['1', '2', '6', '7', '8'],
'Feature1': ['K', 'M', 'O', 'Q', 'S'],
'Feature2': ['L', 'N', 'P', 'R', 'T']}
dummy_data3 = {
'id': ['1', '2', '6', '7', '8'],
'Feature1': ['R', 'S', 'T', 'U', 'V']}
df1 = pd.DataFrame(dummy_data1, columns = ['id', 'Feature1', 'Feature2'])
df2 = pd.DataFrame(dummy_data2, columns = ['id', 'Feature1', 'Feature2'])
df3 = pd.DataFrame(dummy_data3, columns = ['id', 'Feature1'])
此操作(请参见下面的代码)已被很好地理解(情况1中没有错误,情况2中长度不匹配)
>>>df1.columns == df2.columns # CASE 1
>>>array([ True, True, True])
>>>df1.columns == df3.columns # CASE 2
>>>ValueError
Traceback (most recent call last)
<ipython-input-107-d30deec2e5d5> in <module>
----> 1 df1.columns == df3.columns
ValueError: Lengths must match to compare
但是当我做
>>>mergeRequired = False if False in df1.columns == df3.columns else True
>>>print(mergeRequired)
>>>True
我应该得到ValueError: Lengths must match to compare
而不是True
。为什么这不会引发任何错误?如何强制程序在mergeRequired = False if False in df1.columns == df3.columns else True
处引发错误?
答案 0 :(得分:0)
编写此代码时:
mergeRequired = False if False in df1.columns == df3.columns else True
它的解释方式与此相同:
mergeRequired = False if (False in df1.columns) == df3.columns else True
因为运算符in
和==
在Python中具有相同的优先级(请参阅here),这解释了观察到的行为。
要解决您的问题,应使用括号,如下所示:
mergeRequired = False if False in (df1.columns == df3.columns) else True