Python-未找到匹配项时返回默认值

Python-未找到匹配项时返回默认值,python,csv,pandas,Python,Csv,Pandas,我将2个CSV文件与python进行比较,所有文件都正常工作。它在employee_id列上进行匹配,并将结果输出到csv文件 df1 = pd.read_csv('input1.csv', sep=',\s+', delimiter=',', encoding="utf-8") df2 = pd.read_csv('input2.csv', sep=',\s,', delimiter=',', encoding="utf-8") df3 = pd.merge(df1,d

我将2个CSV文件与python进行比较,所有文件都正常工作。它在employee_id列上进行匹配,并将结果输出到csv文件

    df1 = pd.read_csv('input1.csv', sep=',\s+', delimiter=',', encoding="utf-8")
    df2 = pd.read_csv('input2.csv', sep=',\s,', delimiter=',', encoding="utf-8")
    df3 = pd.merge(df1,df2, on='employee_id', how='right')
    df3.to_csv('output.csv', encoding='utf-8', index=False)
当它没有找到匹配项时,会返回一个空白结果,我希望它返回未找到

熊猫可以这样做吗?或者我应该在以后做一些处理吗?

我认为您可以在
df1
中使用if no
NaN

df1 = pd.DataFrame({'employee_id':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9]})

print (df1)
   B  C  employee_id
0  4  7            1
1  5  8            2
2  6  9            3

df2 = pd.DataFrame({'employee_id':[1,4,6],
                   'D':[4,5,6],
                   'E':[7,8,9]})

print (df2)
   D  E  employee_id
0  4  7            1
1  5  8            4
2  6  9            6

df3 = pd.merge(df1,df2, on='employee_id', how='right')
df3[df1.columns] = df3[df1.columns].fillna('not_found')
print (df3)
           B          C  employee_id  D  E
0          4          7            1  4  7
1  not_found  not_found            4  5  8
2  not_found  not_found            6  6  9
但是,如果有必要在
df1
中创建掩码,以识别
右侧的
缺失值,则在或中使用参数
连接-indicator=True
,并通过
~/code>取消掩码:

df1 = pd.DataFrame({'employee_id':[1,2,3],
                   'B':[np.nan,5,6],
                   'C':[7,8,9]})

print (df1)
     B  C  employee_id
0  NaN  7            1
1  5.0  8            2
2  6.0  9            3

df3 = pd.merge(df1,df2, on='employee_id', how='right', indicator=True)
mask = df3['_merge'] == 'right_only'
df3.loc[mask, df1.columns.difference(['employee_id'])] = 
df3.loc[mask,df1.columns.difference(['employee_id'])].fillna('not_found')

df3 = df3.drop('_merge', axis=1)
print (df3)
           B          C  employee_id  D  E
0        NaN          7            1  4  7
1  not_found  not_found            4  5  8
2  not_found  not_found            6  6  9


非常感谢,它们是很好的例子。省去了我事后处理文件的麻烦。Grad可以帮助您;)天气真好!
df3 = pd.merge(df1,df2, on='employee_id', how='right')
mask = ~df2['employee_id'].isin(df1['employee_id'])

df3.loc[mask, df1.columns.difference(['employee_id'])] = \
df3.loc[mask,df1.columns.difference(['employee_id'])].fillna('not_found')

print (df3)
           B          C  employee_id  D  E
0        NaN          7            1  4  7
1  not_found  not_found            4  5  8
2  not_found  not_found            6  6  9